Benchling: https://benchling.com/sukanya90/f/lib_zxmZ8Mek-time-lapse-exp/etr_De66ep6D-decay-in-leu2modc-gfp-pup1-rfp/edit

Only 20min timelapse because we concluded that we wont be able to decouple photobleaching from proteasomal decay

this RMD is to generate the df for decay rate estimation for the DMSO control

library(data.table)
library(tidyverse)
library(reshape2)
library(gganimate)
library(ggridges)
library(ggpubr)
source("~/R-scripts/R_functions/master-2-3-22.R")

#getting the information for imaris files ##files to read from Imaris

FilesToRead <- c("C0_Area", 
            "C0_Ellipsoid_Axis_Length_B",
            "C0_Ellipsoid_Axis_Length_C",
            "C0_Intensity_Center_Ch=3",
            "C0_Intensity_Mean_Ch=3", 
            "C0_Intensity_Median_Ch=3",
            "C0_Intensity_Sum_Ch=3",
            "C0_Number_of_Voxels", 
            "C0_Number_of_Triangles",
            "C0_Sphericity", 
            "C0_Volume.csv", 
            "C0_Position.csv" )

##actual reading and making them into df

####MG132
#Getting the list of all the samples in the experiment 
gfp_imaris <- dir("~/Imaris-data/2022/pup1_rfp/6-28-22/modc-pup1/imaris/gfp", full.names = TRUE)

#getting the information for imageJ image info files
#getting all the image info txt for all the images in the experiment. 
list.image.info <- list.files("~/Imaris-data/2022/pup1_rfp/6-28-22/modc-pup1/image_info_imageJ" , full.names = TRUE)

#Extracting information from the imageJ csv into a df with actual time differences between each images 
real.time.interval.df <- get.image.info.OnlyGFP(list.image.info = list.image.info)      

#Extracting information from the imaris csv into a df with information on area, time, gfp intensity, mcherry intensity, (mean, median and sum), volume, trackID and IDs
list.of.files.gfp <- get.imaris.info.onlyGFP( dir.names = gfp_imaris, 
                                              files_to_read = FilesToRead ,
                                              real.time.interval.df = real.time.interval.df)

list.of.files.gfp$`20min` %>% 
  split(.$field)


list.of.files.gfp$`20min` %>% filter(is.na(trackID))

#Assigning the sample by to each field. There are two fields of autofluorescecne in this experiment. The neg.singal stands for the autofluorescence sample.

list.of.files.gfp[["20min"]] <- list.of.files.gfp[["20min"]] %>% 
  mutate(sample = ifelse(exp.field %in% c("20min_s1", "20min_s2"), "neg.signal", "pos.signal"))

#getting the imaris info of DAPI and pup1-rfp ##files to read (these will have rfp and dapi) ##Use the cells_surface data from Imaris #files to read

#reading the cell surface imaris files

# dapi_pup1_imaris_cells <- dir("~/Imaris-data/2022/proteasome_inhibition/2-23-22-PI/1uM/imaris/surface/cells", full.names = TRUE) 
# 
# list.of.files.dapi.pup1 <- get.imaris.info.dapi_pup1(dir.names = dapi_pup1_imaris_cells, 
#                                                      files_to_read = FilesToReadDAPIRFP)
# 
# unique(list.of.files.dapi.pup1$timepoint)

#getting the pup1-rfp puncta info ##use the pup1_surface info from Imaris

FilesToReadDAPIRFP <- c("C0_Area", 
            "C0_BoundingBoxOO_Length_B",
            "C0_BoundingBoxOO_Length_C",
            "C0_Ellipsoid_Axis_Length_B",
            "C0_Ellipsoid_Axis_Length_C",
            "C0_Intensity_Center_Ch=4",
            "C0_Intensity_Mean_Ch=4", 
            "C0_Intensity_Median_Ch=4",
            "C0_Intensity_Sum_Ch=4",
            "C0_Intensity_Center_Ch=5",
            "C0_Intensity_Mean_Ch=5", 
            "C0_Intensity_Median_Ch=5",
            "C0_Intensity_Sum_Ch=5",
            "C0_Number_of_Voxels", 
            "C0_Number_of_Triangles",
            "C0_Sphericity", 
            "C0_Volume.csv", 
            "C0_Position_X.csv",
            "C0_Position_Y.csv",
            "C0_Intensity_Max_Ch=6",
            "C0_Intensity_Center_Ch=6")

#first get the info of the cell surface then match each cell surface with the pup1 puncta. do not include the MRG cells as they have no pup1-rfp puncta mask

#Getting the pup1 puncta surface info

pup1_surface_imaris <- dir("~/Imaris-data/2022/pup1_rfp/6-28-22/modc-pup1/imaris/surface/pup1", full.names = TRUE) 

pup1_puncta <- get.imaris.info.dapi_pup1.surface(dir.names = pup1_surface_imaris, 
                                                 files_to_read = FilesToReadDAPIRFP) 

#combine the cell surface info with the pup1 puncta info.

#combine the cell surface + pup1 puncta info of the pup1 expressing cells with all the cell surface information. There will be NAs in the columns with puncta in their names for the neg cells

# pup1.dapi.all <- list.of.files.dapi.pup1 %>% 
#   left_join(.,pup1.dapi.cell.puncta %>% 
#               select(.,area, 
#                      pos.x, 
#                      pos.y,
#                      timepoint,
#                      experiment, 
#                      field, 
#                      rfp.center.puncta, rfp.mean.puncta, rfp.median.puncta, rfp.sum.puncta,
#                      dapi.mean.puncta,dapi.sum.puncta, dapi.median.puncta,
#                      area.puncta, no.of.voxels.puncta), 
#             by = c("area","pos.x","pos.y","timepoint", "experiment", "field"))
# 
# pup1.dapi.all

#dont need to do this. 

Combining the GFP intensities with the rfp puncta info at t = 1

cell_atributes <- list.of.files.gfp$`20min` %>% 
  filter(timepoint %in% c(1,31)) %>% 
  left_join(.,pup1.dapi.cell.puncta %>% select(-all.mask.int.max,
                                               -all.mask.int.center) ,
            by = c("area",
                   "timepoint",
                   "pos.x",
                   "pos.y",
                   "experiment",
                   "field"))

cell_atributes %>% 
  # filter(unique.trackID == "1000001774_20min_s3")
    dplyr::group_by(field, unique.trackID, timepoint) %>%
    dplyr::summarise(n = dplyr::n(), .groups = "drop") %>%
    dplyr::filter(n > 1L)
#6440 cells. There are 6 cells with multiple pup1 puncta. maybe drop these cells just for simplicity purposes. 

#Background subtraction

#background info files for gfp and mcherry and DAPI: the background folder has two directories: gfp bg and mcherry+dapi bg
bg <- dir(path = "~/Imaris-data/2022/pup1_rfp/6-28-22/modc-pup1/background" , full.names = TRUE)

#Get the information for the background intensity for every image for 
#rfp and DAPI
rfp.dapi.bg.means <- bg.intensity.rfp.dapi(bg.files = list.files(bg[1] , full.names = TRUE))
rfp.dapi.bg.means
$`20min`
#for GFP
gfp.bg.mean <- bg.intensity.gfp(bg.files = list.files(bg[2] , full.names = TRUE))
Warning: Values from `Mean` and `Min` are not uniquely identified; output will contain list-cols.
* Use `values_fn = list` to suppress this warning.
* Use `values_fn = {summary_fun}` to summarise duplicates.
* Use the following dplyr code to identify duplicates.
  {data} %>%
    dplyr::group_by(experiment, field, timepoint, channel.name) %>%
    dplyr::summarise(n = dplyr::n(), .groups = "drop") %>%
    dplyr::filter(n > 1L)
gfp.bg.mean$`20min` %>% arrange(field,timepoint)

s3, s4, s5, s6, s7, s8

#gfp background for s4, s5 and s6 samples:

#actually subtract the background intensity from the gfp and mcherry intensity of the cells

sub.bg.intensity.dapi.rfp
function(list.of.files, bg.means){
  #subtracting the background gfp and mcherry from signal
  list.of.files.bg.sub <- left_join(bind_rows(list.of.files) ,                                        
                                    bind_rows(bg.means), by = c("timepoint", "experiment", "field")) %>%  #adding the average background dapi and mcherry intensity to the df of cells info wrt each                                                                                                       time point, experiment, and sample 
    mutate(.,  dapi.mean.bg.sub = dapi.int.mean - avg.dapi.bg , #subtracting the overall average mcherry background intensity from the cell's mcherry mean intensity
           dapi.mean.bg.sub.puncta = dapi.mean.puncta - avg.dapi.bg , 
           dapi.sum.bg.sub = dapi.int.sum - (no.of.voxels*avg.dapi.bg) ,
           dapi.sum.bg.sub.puncta = dapi.sum.puncta - (no.of.voxels.puncta*avg.dapi.bg),
           
           rfp.mean.bg.sub = rfp.int.mean - avg.rfp.bg , 
           rfp.sum.bg.sub = rfp.int.sum - (no.of.voxels*avg.rfp.bg),
           rfp.mean.bg.sub.puncta = rfp.mean.puncta - avg.rfp.bg,
           rfp.sum.bg.sub.puncta = rfp.sum.puncta - (no.of.voxels.puncta*avg.rfp.bg)
           ) %>%  #subtracting the total background mcherry intensity (multiplying the cell's no.of voxels to the avg.                                                                                                              background intensity) from the cell's total mcherry mean intensity. 
    split(.$experiment)
}

#combine the background subtracted gfp dataframe with the bg subtracted rfp/dapi total and puncta dfs

gfp.rfp.dapi.bg.sub <- gfp.bg.sub$`20min` %>% 
  filter(timepoint %in% c(1,31)) %>% 
  select(unique.trackID,
         gfp.mean.bg.sub,
         gfp.sum.bg.sub,
         avg.gfp.bg,
         area,
         pos.x,
         pos.y) %>% 
  left_join(.,rfp.dapi.bg.sub$`20min`, by = c("unique.trackID", "area","pos.x","pos.y")) %>% split(.$experiment)

#filtering cells which have negative background subtracted intensities

#Uniqe trackIDs of cells above the background int for gfp, dapi and rfp 
#this function results in a list of two dfs. the 1st df = uniquetrackIDs with the experiment they're from.
listOfUniqtrackID_gfpfiltereddf <- trackID.abv.zero.gfp.rfp.dapi(
  bg_subtracted_dftp1 = gfp.rfp.dapi.bg.sub,
  list_gfp_all_tps = gfp.bg.sub)
#the df with gfp intensities for all timepoints which is filtered for cells gfp.mean.bg.sub > 0 
list.of.files.bg.sub.above.0.gfp <- listOfUniqtrackID_gfpfiltereddf[[2]] %>% 
  split(.$experiment)

#removing cells with negative background subtracted intensities from the dataframe with the cell info from timepoint 1 and the last timepoint

gfp_rfp_dapi_bgsubAbvZero_tp1 <- listOfUniqtrackID_gfpfiltereddf[[1]] %>% 
  left_join(.,bind_rows(gfp.rfp.dapi.bg.sub) , by = c("unique.trackID", "experiment"))

gfp_rfp_dapi_bgsubAbvZero_tp1 %>% 
  group_by(timepoint, exp.field) %>% 
  tally()

list.of.files.bg.sub.above.0.gfp$`20min`%>% 
  group_by(timepoint, exp.field) %>% tally()

#s3, s4, s5, s6, s7 and s8 need to fix the background subtraction

#density plot of the DAPI staining. Higher DAPI staining == dead cells

#at the first timepoint
gfp_rfp_dapi_bgsubAbvZero_tp1  %>% 
  ggplot(.,aes(x = dapi.mean.bg.sub, color = as.factor(timepoint)))+
  geom_density(aes(y=..scaled..))+
  facet_wrap(~field, scales = "free_x")+
  scale_x_log10()+
  theme_pubr(x.text.angle = 45)



#correlation of the dapi staining at timepint 1 and the last timepoint
# gfp_rfp_dapi_bgsubAbvZero_tp1  %>%
#   select(dapi.mean.bg.sub, timepoint, field, unique.trackID) %>%
#   filter(!(unique.trackID == "1000000259_20min_s8")) %>% 
#   pivot_wider(values_from = dapi.mean.bg.sub, names_from = timepoint) %>% 
#   ggplot(.,aes(x = `1`, y = `31`))+
#   geom_point()+
#   facet_wrap(~field, scales = "free_x")+
#   theme_pubr(x.text.angle = 45)

#the above code did not work because there are duplicate values for a given cell ID. 

#to find the duplicates
gfp_rfp_dapi_bgsubAbvZero_tp1  %>% 
  select(dapi.mean.bg.sub, timepoint, field, unique.trackID) %>%
    dplyr::group_by(field, unique.trackID, timepoint) %>%
    dplyr::summarise(n = dplyr::n(), .groups = "drop") %>%
    dplyr::filter(n > 1L)

#remove the duplicates and look at how dapi staining is changing from timepoint 1 to tp 31:
#correlation of the dapi staining at timepint 1 and the last timepoint
gfp_rfp_dapi_bgsubAbvZero_tp1  %>%
  select(dapi.mean.bg.sub, timepoint, field, unique.trackID) %>%
  filter(!(unique.trackID == "1000002071_20min_s8")) %>% 
  pivot_wider(values_from = dapi.mean.bg.sub, names_from = timepoint) %>% 
  ggplot(.,aes(x = `1`, y = `31`))+
  geom_point()+
  facet_wrap(~field, scales = "free_x")+
  theme_pubr(x.text.angle = 45)
Warning: Values from `dapi.mean.bg.sub` are not uniquely identified; output will contain list-cols.
* Use `values_fn = list` to suppress this warning.
* Use `values_fn = {summary_fun}` to summarise duplicates.
* Use the following dplyr code to identify duplicates.
  {data} %>%
    dplyr::group_by(field, unique.trackID, timepoint) %>%
    dplyr::summarise(n = dplyr::n(), .groups = "drop") %>%
    dplyr::filter(n > 1L)
Error: Discrete value supplied to continuous scale

#get the threshold of dapi above which the cells will be deemed dead!!

#split the df into the experiments so that there is a dead cell threshold for every experiment 
deadcell_temp_df <- gfp_rfp_dapi_bgsubAbvZero_tp1 %>% 
  split(.$experiment) 


deadCell_boundry <- dapi.threshold(df_for_threshold = deadcell_temp_df , lower_lim = 100, uppr_lim = 300 ) %>% 
  rename("exp.field" = "experiment")


#at the first timepoint
gfp_rfp_dapi_bgsubAbvZero_tp1 %>% 
  filter(timepoint == 1) %>% 
  left_join(.,deadCell_boundry , by = "exp.field") %>% 
  ggplot(.,aes(x = dapi.mean.bg.sub, color = sample))+
  geom_density(aes(y=..scaled..))+
  geom_vline(xintercept = c(100, 300))+
  facet_wrap(~exp.field, scales = "free_x")+
  scale_x_log10()+
  annotation_logticks()+
  theme_pubr(x.text.angle = 45)

#removing cells with dapi intensity greater than the dapi threshold set

#getting the IDs of the cells remaining after removing the cells with higher than threshold dapi intensity. use this to filter cells from the df with mcherry and gfp timelapse information
#will remove dead cells from the first timepoint 
dapi.filtered.cellsTrackID <- bind_rows(deadcell_temp_df) %>% 
  filter(timepoint %in% c(1,31)) %>% 
  left_join(.,deadCell_boundry, by = "exp.field") %>% 
  filter(dapi.mean.bg.sub < dapi.threshold) %>% pull(unique.trackID)

#df with fluorescent intensities of gfp, rfp and dapi for live cells at tp =1 ant tp = 31.
liveCellsRFP.DAPI.GFP <- gfp_rfp_dapi_bgsubAbvZero_tp1 %>% 
  left_join(.,deadCell_boundry, by = "exp.field") 


#df with dead cells removed this df has gfp intensities for all the timepoint which are filtered for dead cells 
new.gfpLiveCells <-  bind_rows(list.of.files.bg.sub.above.0.gfp) %>% 
  filter(unique.trackID %in% liveCellsRFP.DAPI.GFP$unique.trackID)
bind_rows(deadcell_temp_df) %>% 
  filter(timepoint %in% c(1,31)) %>% 
  left_join(.,deadCell_boundry, by = "exp.field") %>% 
  filter(dapi.mean.bg.sub < dapi.threshold) %>% 
  filter(timepoint == 31, field == "s7")

#saving the dataframe with the background subtracted, dead cells filtered intensities of gfps from the autofluor cells (MRG) and the gfp positive cells.

read_csv("~/plots/pup1-rfp-gfp-decay/6-28-22-modc-gfp/data/raw_gfp_int_all.csv")
Rows: 99183 Columns: 27
── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr  (5): unique.trackID, experiment, field, exp.field, sample
dbl (22): area, timepoint, trackID, Elip_B, Elip_C, gfp.intensity.center, gfp.int.mean, gfp.int.median, gfp.int.sum, no.of.voxels, no.of.triangles, spheracit...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

looking at the distribution of rfp and gfp in the live cells

#autofluresence of pup1-rfp
liveCellsRFP.DAPI.GFP %>% 
  filter(timepoint == 1) %>% 
  ggplot(.,aes(x =rfp.mean.bg.sub , color = sample) )+
  geom_density(aes(y = ..scaled..))+
  scale_x_log10()+ 
  facet_wrap(~experiment)+
  annotation_logticks()


liveCellsRFP.DAPI.GFP %>% 
  filter(timepoint == 1) %>% 
  filter(sample == "pos.signal") %>% 
  ggplot(.,aes(x =rfp.mean.bg.sub.puncta , y = gfp.mean.bg.sub) )+
  geom_point()+
  geom_smooth(method = "lm")+
  scale_x_log10()+ 
  scale_y_log10()
`geom_smooth()` using formula 'y ~ x'
Warning: Removed 224 rows containing non-finite values (stat_smooth).
Warning: Removed 224 rows containing missing values (geom_point).

#autofluorescence vs gfp signal 
liveCellsRFP.DAPI.GFP %>% 
  filter(timepoint == 1) %>% 
  ggplot(.,aes(x = gfp.mean.bg.sub, color = sample))+
  geom_density(aes(y = ..scaled..))+
  scale_x_log10()+
  facet_wrap(~field, scales = "free_x")

#plotting line plots raw without any AF filtering

bind_rows(new.gfpLiveCells)%>%
  # filter(field %in% c("s7","s8")) %>% 
  ggplot(.,aes(timepoint, gfp.mean.bg.sub, group = unique.trackID ,color = sample))+
  geom_line(alpha = 0.2)+
  facet_wrap(~field, scales = "free_y")

# ggsave(filename="ln-mrg_vs_gfp.png", plot= last_plot() , path = "~/plots/7-2-20/plots_thesis_com_meet-2020/" , width = 13 , height = 8, bg = "transparent")

new.gfpLiveCells %>% 
  ggplot(.,aes(real.time.gfp, gfp.mean.bg.sub, group = unique.trackID ,color = sample))+
  geom_line(alpha = 0.2)+
  facet_wrap(~field, scales = "free_y")

  # annotation_logticks()

#Filtering cells based on autofluorescence

##getting the autofluorescence threshold for gfp and mcherry

bind_rows(new.gfpLiveCells) %>% 
  filter(experiment == "20min") %>% 
  ggplot(.,aes(x = gfp.mean.bg.sub, color = sample))+
  geom_density(aes(y = ..scaled..))+
  facet_wrap(~timepoint , scales = "free_x")+
  scale_x_log10()


liveCellsRFP.DAPI.GFP %>% 
  filter(timepoint == 31) %>% 
  # filter(experiment == "20min") %>% 
  ggplot(.,aes(x = gfp.mean.bg.sub, color = sample))+
  geom_density(aes(y = ..scaled..))+
  facet_wrap(~experiment , scales = "free_x")+
  scale_x_log10()


liveCellsRFP.DAPI.GFP %>% 
  filter(timepoint == 31) %>% 
  # filter(experiment == "20min") %>% 
  ggplot(.,aes(x = gfp.mean.bg.sub, y = dapi.mean.bg.sub , color = field))+
  geom_point()+
  facet_wrap(~experiment , scales = "free_x")

#filtering based on pup1-rfp expression ##filtering cells which are above the gfp and rfp threshold In the filter.cells.below.autofluor.31tp.gfpV2() function, the function looks for the column named “threshold” and I need to decide which column will be threshold based on the overlap of the neg and positive cells. This is because there are cells which become dead/become in focus as you keep taking images which might suddenly increase the 95th quantile intensity of the negative cells.

#get a filtered df of cells passing the gfp threshold set above 
#this function below first removes cells with pup1-rfp less than the threshold set. 
#Then it removes the cells with less than AF threshold set at tp =1 
#After that it subtracts the af value from every cell for every timepoint, and if the subtracted value is less than 1 it makes it NA. 

cells.filtered.df.31tp <- filter.cells.below.autofluor.31tp.gfpV2(
  df_rfp_dapi_gfp = liveCellsRFP.DAPI.GFP,
  
  rfp_min_int = rfp.min.int %>% rename("quant_95" = "threshold_95", 
                                       "threshold_95" = "pup1_threshold"),
  
  gfp_live_cells_list = new.gfpLiveCells %>% split(.$experiment),
  
  gfp_min_int = gfp.min.int %>% 
    mutate(threshold = threshold_95 )
)

filtered.df.new.wo.af.31tp <- cells.filtered.df.31tp$filtered.df.new %>% 
  bind_rows() %>% 
  filter(sample == "pos.signal") %>% 
  split(.$experiment)

unique(filtered.df.new.wo.af.31tp$`20min`$timepoint)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  

remove the first two blurry images from s7

# filtered.df.new.wo.af.31tp$`20min` <- filtered.df.new.wo.af.31tp$`20min` %>% filter(field == "s7")
#   filter(!(field == "s7" & timepoint %in% c(1,2))) 

#making df for bulk regression

###This function creats the df for fitting the 24 models 
# list.df.model <- df.model(filtered.df.new = filtered.df.new.wo.af)
df.model.31tp.gfp <- df.model.gfp(filtered.df.new = filtered.df.new.wo.af.31tp)
df.model.31tp.gfp

####This function cleans up the df where you subtract the t=0 intensity with all the other intensities for gfp
final.data.31tp.gfp <- clean.df.modeling.gfp(data.gfp = df.model.31tp.gfp)

final.data.31tp.gfp %>% filter(exp.field == "20min_s7")

On 1/28/21 talked to premal about filtering: 1. Remove cells which have positive delta Intensity more than 2 times

#getting IDs of cells which have positive intensity values for less than 2 timepoints 
ids.int.2 <- final.data.31tp.gfp %>% 
  group_by(unique.trackID) %>% 
  tally(ln.gfp.dif > 0) %>% 
  filter(n<2) %>%            #keep cells which have less than two positive intensity values
  pull(unique.trackID)

#filtering cells which have trackID in the above vector  
#gfp
temp.posIntBlw2.gfp <- final.data.31tp.gfp %>% 
  filter(unique.trackID %in% ids.int.2) 

df_for_MechanisticModel <- temp.posIntBlw2.gfp  %>%
  left_join(
    .,
    bind_rows(filtered.df.new.wo.af.31tp) ,
    by = c(
      "unique.trackID",
      "timepoint" ,
      "experiment" ,
      "gfp.mean.bg.af.sub.new" ,
      "exp.field"
    )
  )

#save this dataframe for half life estimation
cell_atributes_final <- df_for_MechanisticModel %>% 
  filter(timepoint == 1)  %>% 
  left_join(.,liveCellsRFP.DAPI.GFP %>% select(unique.trackID,
                                               timepoint,
                                               exp.field,experiment,
                                               rfp.mean.bg.sub,
                                               rfp.mean.bg.sub.puncta,
                                               dapi.mean.bg.sub,
                                               dapi.mean.bg.sub.puncta,
                                               rfp.sum.bg.sub,
                                               rfp.sum.bg.sub.puncta,
                                               dapi.sum.bg.sub,
                                               dapi.sum.bg.sub.puncta), 
            by = c("unique.trackID", "timepoint", "exp.field", "experiment")) 

cell_atributes_final %>% group_by(exp.field) %>% tally()

write_csv(cell_atributes_final,file = "/home/Das/plots/pup1-rfp-gfp-decay/6-28-22-modc-gfp/data/6-28-22_mODC_pup1_attributes.csv")
  

#saving the data

gfp_mODCPest_filtered <- df_for_MechanisticModel  %>%
  rename("cell.id" = "unique.trackID",
         "gfpSumBgAFsub" = "gfp.sum.bg.af.sub",
         "gfpMeanBgAFsub"="gfp.mean.bg.af.sub.new",
         "nat.log.GfpMean" = "ln.gfp" , 
         "delta.int" = "ln.gfp.dif",
         "delta.time" = "time"
         ) %>% 
  select( cell.id,
         gfpSumBgAFsub,
         gfpMeanBgAFsub,
         nat.log.GfpMean,
         delta.time,
         image.no,
         delta.int, 
         exp.field
         )

write_csv(gfp_mODCPest_filtered , file = "~/plots/pup1-rfp-gfp-decay/6-28-22-modc-gfp/data/gfp_mODCPest_pup1_filtered.csv")

#SAVING THE DATAFRAME WHICH HAS ALL THE BACKGROUND INT, AUTOFLUOR INTENSITY (AT THE INTERSECTION, THE 80TH AND THE 95TH QUANTILE OF MRG AUTO GFP INTENSITY)

write_csv(df_for_MechanisticModel , file = "~/plots/pup1-rfp-gfp-decay/6-28-22-modc-gfp/data/gfp_mODCPest_pup1_raw_data.csv")
gfp_mODCPest_filtered %>% 
  ggplot(.,aes(delta.time, gfpMeanBgAFsub, group = cell.id))+
  geom_line(alpha = 0.2)+
  facet_wrap(~exp.field, scales = "free_y")

getting the area of the puncta information

#getting the pup1-rfp puncta info ##use the pup1_surface info from Imaris

FilesToReadDAPIRFP <- c("C0_Area", 
            "C0_BoundingBoxOO_Length_B",
            "C0_BoundingBoxOO_Length_C",
            "C0_Ellipsoid_Axis_Length_B",
            "C0_Ellipsoid_Axis_Length_C",
            "C0_Intensity_Center_Ch=4",
            "C0_Intensity_Mean_Ch=4", 
            "C0_Intensity_Median_Ch=4",
            "C0_Intensity_Sum_Ch=4",
            "C0_Intensity_Center_Ch=5",
            "C0_Intensity_Mean_Ch=5", 
            "C0_Intensity_Median_Ch=5",
            "C0_Intensity_Sum_Ch=5",
            "C0_Number_of_Voxels", 
            "C0_Number_of_Triangles",
            "C0_Sphericity", 
            "C0_Volume.csv", 
            "C0_Position_X.csv",
            "C0_Position_Y.csv",
            "C0_Intensity_Max_Ch=6",
            "C0_Intensity_Center_Ch=6")

#first get the info of the cell surface then match each cell surface with the pup1 puncta. do not include the MRG cells as they have no pup1-rfp puncta mask

dapi_pup1_imaris_cells <- dir("~/Imaris-data/2022/pup1_rfp/6-28-22/modc-pup1/imaris/surface/cells", full.names = TRUE) 

list.of.files.dapi.pup1 <- get.imaris.info.dapi_pup1.surface(dir.names = dapi_pup1_imaris_cells, files_to_read = FilesToReadDAPIRFP) #updated this function to not include trackIDs
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
list.of.files.dapi.pup1 

#Getting the pup1 puncta surface info

pup1_surface_imaris <- dir("~/Imaris-data/2022/pup1_rfp/6-28-22/modc-pup1/imaris/surface/pup1", full.names = TRUE) 

pup1_puncta <- get.imaris.info.dapi_pup1.surface(dir.names = pup1_surface_imaris, 
                                                 files_to_read = FilesToReadDAPIRFP) 
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
pup1_puncta

#combine the cell surface info with the pup1 puncta info.

#this should have 6512 no. of cells 
pup1.dapi.cell.puncta <- list.of.files.dapi.pup1 %>% #df with entire cell segmented 
  select(
    area,
    pos.x,
    pos.y,
    timepoint,
    all.mask.int.max,
    all.mask.int.center,
    rfp.int.mean,
    rfp.int.median,
    rfp.int.sum,
    dapi.int.mean,
    dapi.int.median,
    dapi.int.sum,
    experiment,
    field
  ) %>% 
  left_join(
    .,
    pup1_puncta %>%        #df with the pup1 puncta segmented 
      select(
        rfp.int.center,
        rfp.int.mean,
        rfp.int.median,
        rfp.int.sum,
        dapi.int.mean,
        dapi.int.sum,
        dapi.int.median,
        all.mask.int.max,
        all.mask.int.center,
        area,
        timepoint,
        experiment,
        field,
        no.of.voxels
      ) %>% rename("area.puncta" = "area",
                   "rfp.center.puncta" = "rfp.int.center",
                   "rfp.mean.puncta" = "rfp.int.mean",
                   "rfp.sum.puncta" = "rfp.int.sum",
                   "rfp.median.puncta" = "rfp.int.median",
                   "dapi.mean.puncta" = "dapi.int.mean",
                   "dapi.sum.puncta" = "dapi.int.sum",
                   "dapi.median.puncta" = "dapi.int.median",
                   "no.of.voxels.puncta" = "no.of.voxels"),
     by = c("all.mask.int.max" , 
            "experiment" , 
            "field" , 
            "timepoint" , 
            "all.mask.int.center")
  )


pup1.dapi.cell.puncta 
#this has 6514 cells. some cells have multiple puncta. maybe just drop the cells. 
read_csv("~/plots/pup1-rfp-gfp-decay/6-28-22-modc-gfp/data/6-28-22_mODC_pup1_attributes.csv") %>% 
  left_join(.,pup1.dapi.cell.puncta %>% 
              select(area,pos.x,pos.y, timepoint, experiment, field, area.puncta, no.of.voxels.puncta), 
            by = c("area", "pos.x","pos.y","timepoint","experiment","field")) %>%
  write_csv(.,path = "~/plots/pup1-rfp-gfp-decay/6-28-22-modc-gfp/data/6-28-22_mODC_pup1_attributes.csv")
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQotLS0KdGl0bGU6ICI2LTI4LTIyIG1PREMtR0ZQIHB1cDEtcmZwIGRlY2F5IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCkJlbmNobGluZzogaHR0cHM6Ly9iZW5jaGxpbmcuY29tL3N1a2FueWE5MC9mL2xpYl96eG1aOE1lay10aW1lLWxhcHNlLWV4cC9ldHJfRGU2NmVwNkQtZGVjYXktaW4tbGV1Mm1vZGMtZ2ZwLXB1cDEtcmZwL2VkaXQgCgpPbmx5IDIwbWluIHRpbWVsYXBzZSBiZWNhdXNlIHdlIGNvbmNsdWRlZCB0aGF0IHdlIHdvbnQgYmUgYWJsZSB0byBkZWNvdXBsZSBwaG90b2JsZWFjaGluZyBmcm9tIHByb3RlYXNvbWFsIGRlY2F5Cgp0aGlzIFJNRCBpcyB0byBnZW5lcmF0ZSB0aGUgZGYgZm9yIGRlY2F5IHJhdGUgZXN0aW1hdGlvbiBmb3IgdGhlIERNU08gY29udHJvbAoKYGBge3J9CmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocmVzaGFwZTIpCmxpYnJhcnkoZ2dhbmltYXRlKQpsaWJyYXJ5KGdncmlkZ2VzKQpsaWJyYXJ5KGdncHVicikKYGBgCgpgYGB7cn0Kc291cmNlKCJ+L1Itc2NyaXB0cy9SX2Z1bmN0aW9ucy9tYXN0ZXItMi0zLTIyLlIiKQpgYGAKCiNnZXR0aW5nIHRoZSBpbmZvcm1hdGlvbiBmb3IgaW1hcmlzIGZpbGVzCiMjZmlsZXMgdG8gcmVhZCBmcm9tIEltYXJpcwpgYGB7cn0KRmlsZXNUb1JlYWQgPC0gYygiQzBfQXJlYSIsIAogICAgICAgICAgICAiQzBfRWxsaXBzb2lkX0F4aXNfTGVuZ3RoX0IiLAogICAgICAgICAgICAiQzBfRWxsaXBzb2lkX0F4aXNfTGVuZ3RoX0MiLAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X0NlbnRlcl9DaD0zIiwKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9NZWFuX0NoPTMiLCAKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9NZWRpYW5fQ2g9MyIsCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfU3VtX0NoPTMiLAogICAgICAgICAgICAiQzBfTnVtYmVyX29mX1ZveGVscyIsIAogICAgICAgICAgICAiQzBfTnVtYmVyX29mX1RyaWFuZ2xlcyIsCiAgICAgICAgICAgICJDMF9TcGhlcmljaXR5IiwgCiAgICAgICAgICAgICJDMF9Wb2x1bWUuY3N2IiwgCiAgICAgICAgICAgICJDMF9Qb3NpdGlvbi5jc3YiICkKYGBgCiMjYWN0dWFsIHJlYWRpbmcgYW5kIG1ha2luZyB0aGVtIGludG8gZGYgCmBgYHtyfQojIyMjTUcxMzIKI0dldHRpbmcgdGhlIGxpc3Qgb2YgYWxsIHRoZSBzYW1wbGVzIGluIHRoZSBleHBlcmltZW50IApnZnBfaW1hcmlzIDwtIGRpcigifi9JbWFyaXMtZGF0YS8yMDIyL3B1cDFfcmZwLzYtMjgtMjIvbW9kYy1wdXAxL2ltYXJpcy9nZnAiLCBmdWxsLm5hbWVzID0gVFJVRSkKCiNnZXR0aW5nIHRoZSBpbmZvcm1hdGlvbiBmb3IgaW1hZ2VKIGltYWdlIGluZm8gZmlsZXMKI2dldHRpbmcgYWxsIHRoZSBpbWFnZSBpbmZvIHR4dCBmb3IgYWxsIHRoZSBpbWFnZXMgaW4gdGhlIGV4cGVyaW1lbnQuIApsaXN0LmltYWdlLmluZm8gPC0gbGlzdC5maWxlcygifi9JbWFyaXMtZGF0YS8yMDIyL3B1cDFfcmZwLzYtMjgtMjIvbW9kYy1wdXAxL2ltYWdlX2luZm9faW1hZ2VKIiAsIGZ1bGwubmFtZXMgPSBUUlVFKQoKI0V4dHJhY3RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW1hZ2VKIGNzdiBpbnRvIGEgZGYgd2l0aCBhY3R1YWwgdGltZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGVhY2ggaW1hZ2VzIApyZWFsLnRpbWUuaW50ZXJ2YWwuZGYgPC0gZ2V0LmltYWdlLmluZm8uT25seUdGUChsaXN0LmltYWdlLmluZm8gPSBsaXN0LmltYWdlLmluZm8pICAgICAgCgojRXh0cmFjdGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbWFyaXMgY3N2IGludG8gYSBkZiB3aXRoIGluZm9ybWF0aW9uIG9uIGFyZWEsIHRpbWUsIGdmcCBpbnRlbnNpdHksIG1jaGVycnkgaW50ZW5zaXR5LCAobWVhbiwgbWVkaWFuIGFuZCBzdW0pLCB2b2x1bWUsIHRyYWNrSUQgYW5kIElEcwpsaXN0Lm9mLmZpbGVzLmdmcCA8LSBnZXQuaW1hcmlzLmluZm8ub25seUdGUCggZGlyLm5hbWVzID0gZ2ZwX2ltYXJpcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc190b19yZWFkID0gRmlsZXNUb1JlYWQgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbC50aW1lLmludGVydmFsLmRmID0gcmVhbC50aW1lLmludGVydmFsLmRmKQoKbGlzdC5vZi5maWxlcy5nZnAkYDIwbWluYCAlPiUgCiAgc3BsaXQoLiRmaWVsZCkKCgpsaXN0Lm9mLmZpbGVzLmdmcCRgMjBtaW5gICU+JSBmaWx0ZXIoaXMubmEodHJhY2tJRCkpCmBgYAoKCgojQXNzaWduaW5nIHRoZSBzYW1wbGUgYnkgdG8gZWFjaCBmaWVsZC4gVGhlcmUgYXJlIHR3byBmaWVsZHMgb2YgYXV0b2ZsdW9yZXNjZWNuZSBpbiB0aGlzIGV4cGVyaW1lbnQuIFRoZSBuZWcuc2luZ2FsIHN0YW5kcyBmb3IgdGhlIGF1dG9mbHVvcmVzY2VuY2Ugc2FtcGxlLiAKYGBge3J9Cmxpc3Qub2YuZmlsZXMuZ2ZwW1siMjBtaW4iXV0gPC0gbGlzdC5vZi5maWxlcy5nZnBbWyIyMG1pbiJdXSAlPiUgCiAgbXV0YXRlKHNhbXBsZSA9IGlmZWxzZShleHAuZmllbGQgJWluJSBjKCIyMG1pbl9zMSIsICIyMG1pbl9zMiIpLCAibmVnLnNpZ25hbCIsICJwb3Muc2lnbmFsIikpCgpgYGAKCgoKI2dldHRpbmcgdGhlIGltYXJpcyBpbmZvIG9mIERBUEkgYW5kIHB1cDEtcmZwIAojI2ZpbGVzIHRvIHJlYWQgKHRoZXNlIHdpbGwgaGF2ZSByZnAgYW5kIGRhcGkpCiMjVXNlIHRoZSBjZWxsc19zdXJmYWNlIGRhdGEgZnJvbSBJbWFyaXMKI2ZpbGVzIHRvIHJlYWQKCiNyZWFkaW5nIHRoZSBjZWxsIHN1cmZhY2UgaW1hcmlzIGZpbGVzIApgYGB7cn0KIyBkYXBpX3B1cDFfaW1hcmlzX2NlbGxzIDwtIGRpcigifi9JbWFyaXMtZGF0YS8yMDIyL3Byb3RlYXNvbWVfaW5oaWJpdGlvbi8yLTIzLTIyLVBJLzF1TS9pbWFyaXMvc3VyZmFjZS9jZWxscyIsIGZ1bGwubmFtZXMgPSBUUlVFKSAKIyAKIyBsaXN0Lm9mLmZpbGVzLmRhcGkucHVwMSA8LSBnZXQuaW1hcmlzLmluZm8uZGFwaV9wdXAxKGRpci5uYW1lcyA9IGRhcGlfcHVwMV9pbWFyaXNfY2VsbHMsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNfdG9fcmVhZCA9IEZpbGVzVG9SZWFkREFQSVJGUCkKIyAKIyB1bmlxdWUobGlzdC5vZi5maWxlcy5kYXBpLnB1cDEkdGltZXBvaW50KQpgYGAKCgojZ2V0dGluZyB0aGUgcHVwMS1yZnAgcHVuY3RhIGluZm8KIyN1c2UgdGhlIHB1cDFfc3VyZmFjZSBpbmZvIGZyb20gSW1hcmlzCmBgYHtyfQpGaWxlc1RvUmVhZERBUElSRlAgPC0gYygiQzBfQXJlYSIsIAogICAgICAgICAgICAiQzBfQm91bmRpbmdCb3hPT19MZW5ndGhfQiIsCiAgICAgICAgICAgICJDMF9Cb3VuZGluZ0JveE9PX0xlbmd0aF9DIiwKICAgICAgICAgICAgIkMwX0VsbGlwc29pZF9BeGlzX0xlbmd0aF9CIiwKICAgICAgICAgICAgIkMwX0VsbGlwc29pZF9BeGlzX0xlbmd0aF9DIiwKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9DZW50ZXJfQ2g9NCIsCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfTWVhbl9DaD00IiwgCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfTWVkaWFuX0NoPTQiLAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X1N1bV9DaD00IiwKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9DZW50ZXJfQ2g9NSIsCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfTWVhbl9DaD01IiwgCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfTWVkaWFuX0NoPTUiLAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X1N1bV9DaD01IiwKICAgICAgICAgICAgIkMwX051bWJlcl9vZl9Wb3hlbHMiLCAKICAgICAgICAgICAgIkMwX051bWJlcl9vZl9UcmlhbmdsZXMiLAogICAgICAgICAgICAiQzBfU3BoZXJpY2l0eSIsIAogICAgICAgICAgICAiQzBfVm9sdW1lLmNzdiIsIAogICAgICAgICAgICAiQzBfUG9zaXRpb25fWC5jc3YiLAogICAgICAgICAgICAiQzBfUG9zaXRpb25fWS5jc3YiLAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X01heF9DaD02IiwKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9DZW50ZXJfQ2g9NiIpCmBgYAoKI2ZpcnN0IGdldCB0aGUgaW5mbyBvZiB0aGUgY2VsbCBzdXJmYWNlIHRoZW4gbWF0Y2ggZWFjaCBjZWxsIHN1cmZhY2Ugd2l0aCB0aGUgcHVwMSBwdW5jdGEuIApkbyBub3QgaW5jbHVkZSB0aGUgTVJHIGNlbGxzIGFzIHRoZXkgaGF2ZSBubyBwdXAxLXJmcCBwdW5jdGEgbWFzawpgYGB7cn0KZGFwaV9wdXAxX2ltYXJpc19jZWxscyA8LSBkaXIoIn4vSW1hcmlzLWRhdGEvMjAyMi9wdXAxX3JmcC82LTI4LTIyL21vZGMtcHVwMS9pbWFyaXMvc3VyZmFjZS9jZWxscyIsIGZ1bGwubmFtZXMgPSBUUlVFKSAKCmxpc3Qub2YuZmlsZXMuZGFwaS5wdXAxIDwtIGdldC5pbWFyaXMuaW5mby5kYXBpX3B1cDEuc3VyZmFjZShkaXIubmFtZXMgPSBkYXBpX3B1cDFfaW1hcmlzX2NlbGxzLCBmaWxlc190b19yZWFkID0gRmlsZXNUb1JlYWREQVBJUkZQKSAjdXBkYXRlZCB0aGlzIGZ1bmN0aW9uIHRvIG5vdCBpbmNsdWRlIHRyYWNrSURzCgpsaXN0Lm9mLmZpbGVzLmRhcGkucHVwMSAKYGBgCgoKI0dldHRpbmcgdGhlIHB1cDEgcHVuY3RhIHN1cmZhY2UgaW5mbyAKYGBge3J9CnB1cDFfc3VyZmFjZV9pbWFyaXMgPC0gZGlyKCJ+L0ltYXJpcy1kYXRhLzIwMjIvcHVwMV9yZnAvNi0yOC0yMi9tb2RjLXB1cDEvaW1hcmlzL3N1cmZhY2UvcHVwMSIsIGZ1bGwubmFtZXMgPSBUUlVFKSAKCnB1cDFfcHVuY3RhIDwtIGdldC5pbWFyaXMuaW5mby5kYXBpX3B1cDEuc3VyZmFjZShkaXIubmFtZXMgPSBwdXAxX3N1cmZhY2VfaW1hcmlzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzX3RvX3JlYWQgPSBGaWxlc1RvUmVhZERBUElSRlApIAoKYGBgCiAKCgojY29tYmluZSB0aGUgY2VsbCBzdXJmYWNlIGluZm8gd2l0aCB0aGUgcHVwMSBwdW5jdGEgaW5mby4gCmBgYHtyfQojdGhpcyBzaG91bGQgaGF2ZSA2NTEyIG5vLiBvZiBjZWxscyAKcHVwMS5kYXBpLmNlbGwucHVuY3RhIDwtIGxpc3Qub2YuZmlsZXMuZGFwaS5wdXAxICU+JSAjZGYgd2l0aCBlbnRpcmUgY2VsbCBzZWdtZW50ZWQgCiAgc2VsZWN0KAogICAgYXJlYSwKICAgIHBvcy54LAogICAgcG9zLnksCiAgICB0aW1lcG9pbnQsCiAgICBhbGwubWFzay5pbnQubWF4LAogICAgYWxsLm1hc2suaW50LmNlbnRlciwKICAgIHJmcC5pbnQubWVhbiwKICAgIHJmcC5pbnQubWVkaWFuLAogICAgcmZwLmludC5zdW0sCiAgICBkYXBpLmludC5tZWFuLAogICAgZGFwaS5pbnQubWVkaWFuLAogICAgZGFwaS5pbnQuc3VtLAogICAgZXhwZXJpbWVudCwKICAgIGZpZWxkCiAgKSAlPiUgCiAgbGVmdF9qb2luKAogICAgLiwKICAgIHB1cDFfcHVuY3RhICU+JSAgICAgICAgI2RmIHdpdGggdGhlIHB1cDEgcHVuY3RhIHNlZ21lbnRlZCAKICAgICAgc2VsZWN0KAogICAgICAgIHJmcC5pbnQuY2VudGVyLAogICAgICAgIHJmcC5pbnQubWVhbiwKICAgICAgICByZnAuaW50Lm1lZGlhbiwKICAgICAgICByZnAuaW50LnN1bSwKICAgICAgICBkYXBpLmludC5tZWFuLAogICAgICAgIGRhcGkuaW50LnN1bSwKICAgICAgICBkYXBpLmludC5tZWRpYW4sCiAgICAgICAgYWxsLm1hc2suaW50Lm1heCwKICAgICAgICBhbGwubWFzay5pbnQuY2VudGVyLAogICAgICAgIGFyZWEsCiAgICAgICAgdGltZXBvaW50LAogICAgICAgIGV4cGVyaW1lbnQsCiAgICAgICAgZmllbGQsCiAgICAgICAgbm8ub2Yudm94ZWxzCiAgICAgICkgJT4lIHJlbmFtZSgiYXJlYS5wdW5jdGEiID0gImFyZWEiLAogICAgICAgICAgICAgICAgICAgInJmcC5jZW50ZXIucHVuY3RhIiA9ICJyZnAuaW50LmNlbnRlciIsCiAgICAgICAgICAgICAgICAgICAicmZwLm1lYW4ucHVuY3RhIiA9ICJyZnAuaW50Lm1lYW4iLAogICAgICAgICAgICAgICAgICAgInJmcC5zdW0ucHVuY3RhIiA9ICJyZnAuaW50LnN1bSIsCiAgICAgICAgICAgICAgICAgICAicmZwLm1lZGlhbi5wdW5jdGEiID0gInJmcC5pbnQubWVkaWFuIiwKICAgICAgICAgICAgICAgICAgICJkYXBpLm1lYW4ucHVuY3RhIiA9ICJkYXBpLmludC5tZWFuIiwKICAgICAgICAgICAgICAgICAgICJkYXBpLnN1bS5wdW5jdGEiID0gImRhcGkuaW50LnN1bSIsCiAgICAgICAgICAgICAgICAgICAiZGFwaS5tZWRpYW4ucHVuY3RhIiA9ICJkYXBpLmludC5tZWRpYW4iLAogICAgICAgICAgICAgICAgICAgIm5vLm9mLnZveGVscy5wdW5jdGEiID0gIm5vLm9mLnZveGVscyIpLAogICAgIGJ5ID0gYygiYWxsLm1hc2suaW50Lm1heCIgLCAKICAgICAgICAgICAgImV4cGVyaW1lbnQiICwgCiAgICAgICAgICAgICJmaWVsZCIgLCAKICAgICAgICAgICAgInRpbWVwb2ludCIgLCAKICAgICAgICAgICAgImFsbC5tYXNrLmludC5jZW50ZXIiKQogICkKCgogIAojdGhpcyBoYXMgNjUxNCBjZWxscy4gc29tZSBjZWxscyBoYXZlIG11bHRpcGxlIHB1bmN0YS4gbWF5YmUganVzdCBkcm9wIHRoZSBjZWxscy4gCmBgYAoKCiNjb21iaW5lIHRoZSBjZWxsIHN1cmZhY2UgKyBwdXAxIHB1bmN0YSBpbmZvIG9mIHRoZSBwdXAxIGV4cHJlc3NpbmcgY2VsbHMgd2l0aCBhbGwgdGhlIGNlbGwgc3VyZmFjZSBpbmZvcm1hdGlvbi4gVGhlcmUgd2lsbCBiZSBOQXMgaW4gdGhlIGNvbHVtbnMgd2l0aCBwdW5jdGEgaW4gdGhlaXIgbmFtZXMgZm9yIHRoZSBuZWcgY2VsbHMgCmBgYHtyfQojIHB1cDEuZGFwaS5hbGwgPC0gbGlzdC5vZi5maWxlcy5kYXBpLnB1cDEgJT4lIAojICAgbGVmdF9qb2luKC4scHVwMS5kYXBpLmNlbGwucHVuY3RhICU+JSAKIyAgICAgICAgICAgICAgIHNlbGVjdCguLGFyZWEsIAojICAgICAgICAgICAgICAgICAgICAgIHBvcy54LCAKIyAgICAgICAgICAgICAgICAgICAgICBwb3MueSwKIyAgICAgICAgICAgICAgICAgICAgICB0aW1lcG9pbnQsCiMgICAgICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudCwgCiMgICAgICAgICAgICAgICAgICAgICAgZmllbGQsIAojICAgICAgICAgICAgICAgICAgICAgIHJmcC5jZW50ZXIucHVuY3RhLCByZnAubWVhbi5wdW5jdGEsIHJmcC5tZWRpYW4ucHVuY3RhLCByZnAuc3VtLnB1bmN0YSwKIyAgICAgICAgICAgICAgICAgICAgICBkYXBpLm1lYW4ucHVuY3RhLGRhcGkuc3VtLnB1bmN0YSwgZGFwaS5tZWRpYW4ucHVuY3RhLAojICAgICAgICAgICAgICAgICAgICAgIGFyZWEucHVuY3RhLCBuby5vZi52b3hlbHMucHVuY3RhKSwgCiMgICAgICAgICAgICAgYnkgPSBjKCJhcmVhIiwicG9zLngiLCJwb3MueSIsInRpbWVwb2ludCIsICJleHBlcmltZW50IiwgImZpZWxkIikpCiMgCiMgcHVwMS5kYXBpLmFsbAoKI2RvbnQgbmVlZCB0byBkbyB0aGlzLiAKYGBgCgoKQ29tYmluaW5nIHRoZSBHRlAgaW50ZW5zaXRpZXMgd2l0aCB0aGUgcmZwIHB1bmN0YSBpbmZvIGF0IHQgPSAxIApgYGB7cn0KY2VsbF9hdHJpYnV0ZXMgPC0gbGlzdC5vZi5maWxlcy5nZnAkYDIwbWluYCAlPiUgCiAgZmlsdGVyKHRpbWVwb2ludCAlaW4lIGMoMSwzMSkpICU+JSAKICBsZWZ0X2pvaW4oLixwdXAxLmRhcGkuY2VsbC5wdW5jdGEgJT4lIHNlbGVjdCgtYWxsLm1hc2suaW50Lm1heCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYWxsLm1hc2suaW50LmNlbnRlcikgLAogICAgICAgICAgICBieSA9IGMoImFyZWEiLAogICAgICAgICAgICAgICAgICAgInRpbWVwb2ludCIsCiAgICAgICAgICAgICAgICAgICAicG9zLngiLAogICAgICAgICAgICAgICAgICAgInBvcy55IiwKICAgICAgICAgICAgICAgICAgICJleHBlcmltZW50IiwKICAgICAgICAgICAgICAgICAgICJmaWVsZCIpKQoKY2VsbF9hdHJpYnV0ZXMgJT4lIAogICMgZmlsdGVyKHVuaXF1ZS50cmFja0lEID09ICIxMDAwMDAxNzc0XzIwbWluX3MzIikKICAgIGRwbHlyOjpncm91cF9ieShmaWVsZCwgdW5pcXVlLnRyYWNrSUQsIHRpbWVwb2ludCkgJT4lCiAgICBkcGx5cjo6c3VtbWFyaXNlKG4gPSBkcGx5cjo6bigpLCAuZ3JvdXBzID0gImRyb3AiKSAlPiUKICAgIGRwbHlyOjpmaWx0ZXIobiA+IDFMKQojNjQ0MCBjZWxscy4gVGhlcmUgYXJlIDYgY2VsbHMgd2l0aCBtdWx0aXBsZSBwdXAxIHB1bmN0YS4gbWF5YmUgZHJvcCB0aGVzZSBjZWxscyBqdXN0IGZvciBzaW1wbGljaXR5IHB1cnBvc2VzLiAKYGBgCgojQmFja2dyb3VuZCBzdWJ0cmFjdGlvbiAKYGBge3J9CiNiYWNrZ3JvdW5kIGluZm8gZmlsZXMgZm9yIGdmcCBhbmQgbWNoZXJyeSBhbmQgREFQSTogdGhlIGJhY2tncm91bmQgZm9sZGVyIGhhcyB0d28gZGlyZWN0b3JpZXM6IGdmcCBiZyBhbmQgbWNoZXJyeStkYXBpIGJnCmJnIDwtIGRpcihwYXRoID0gIn4vSW1hcmlzLWRhdGEvMjAyMi9wdXAxX3JmcC82LTI4LTIyL21vZGMtcHVwMS9iYWNrZ3JvdW5kIiAsIGZ1bGwubmFtZXMgPSBUUlVFKQoKI0dldCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBiYWNrZ3JvdW5kIGludGVuc2l0eSBmb3IgZXZlcnkgaW1hZ2UgZm9yIAojcmZwIGFuZCBEQVBJCnJmcC5kYXBpLmJnLm1lYW5zIDwtIGJnLmludGVuc2l0eS5yZnAuZGFwaShiZy5maWxlcyA9IGxpc3QuZmlsZXMoYmdbMV0gLCBmdWxsLm5hbWVzID0gVFJVRSkpCnJmcC5kYXBpLmJnLm1lYW5zCgojZm9yIEdGUApnZnAuYmcubWVhbiA8LSBiZy5pbnRlbnNpdHkuZ2ZwKGJnLmZpbGVzID0gbGlzdC5maWxlcyhiZ1syXSAsIGZ1bGwubmFtZXMgPSBUUlVFKSkKZ2ZwLmJnLm1lYW4kYDIwbWluYCAlPiUgYXJyYW5nZShmaWVsZCx0aW1lcG9pbnQpCmBgYAoKczMsIHM0LCBzNSwgczYsIHM3LCBzOAoKI2dmcCBiYWNrZ3JvdW5kIGZvciBzNCwgczUgYW5kIHM2IHNhbXBsZXM6CmBgYHtyfQpzMy40LjUuNi43LjguZ2ZwLmJnX2ZpbGVzIDwtIGxpc3QuZmlsZXMoIn4vSW1hcmlzLWRhdGEvMjAyMi9wdXAxX3JmcC82LTI4LTIyL21vZGMtcHVwMS9iYWNrZ3JvdW5kL2JnX2dmcF9zMyIsIGZ1bGwubmFtZXMgPSBUKQoKZ2ZwLmJnLm1lYW4uczMuNC41LjYuNy44IDwtIGxhcHBseShzMy40LjUuNi43LjguZ2ZwLmJnX2ZpbGVzLCBmdW5jdGlvbihhKXsKICByZWFkLmNzdihhKSAlPiUgCiAgbXV0YXRlKGZpZWxkID0gc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVClbLG5jb2woc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVCkpLTJdLAogICAgICAgICB0aW1lcG9pbnQgPSBhcy5udW1lcmljKHN0cl9yZW1vdmUoc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVClbLG5jb2woc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVCkpLTFdLCAidCIpKSkgJT4lIAogIHNlbGVjdChmaWVsZCwKICAgICAgICAgdGltZXBvaW50LAogICAgICAgICBNZWFuLAogICAgICAgICBNaW4pICU+JSAKICBncm91cF9ieSh0aW1lcG9pbnQsIGZpZWxkKSAlPiUgCiAgc3VtbWFyaXNlKGF2Zy5nZnAuYmcgPSBtZWFuKE1lYW4pKQp9KSAlPiUgYmluZF9yb3dzKCkKCmdmcC5iZy5tZWFuJGAyMG1pbmAgPC0gZ2ZwLmJnLm1lYW4kYDIwbWluYCAlPiUgCiAgbGVmdF9qb2luKC4sZ2ZwLmJnLm1lYW4uczMuNC41LjYuNy44LCBieSA9IGMoImZpZWxkIiwgInRpbWVwb2ludCIpKSAlPiUgCiAgbXV0YXRlKGF2Zy5nZnAuYmcgPSBpZmVsc2UoaXMubmEoYXZnLmdmcC5iZyksIE1lYW5fZ2ZwLCBhdmcuZ2ZwLmJnKSkgCgpnZnAuYmcubWVhbiRgMjBtaW5gICU+JSAKICBncm91cF9ieShmaWVsZCkgJT4lIAogIGFycmFuZ2UoZmllbGQsIHRpbWVwb2ludCkKYGBgCgpgYGB7cn0KczMuNC41LjYuNy44LnJmcC5kYXBpIDwtIGxpc3QuZmlsZXMoIn4vSW1hcmlzLWRhdGEvMjAyMi9wdXAxX3JmcC82LTI4LTIyL21vZGMtcHVwMS9iYWNrZ3JvdW5kL2JnX2RhcGlfbWNoZXJyeV9zMyIsIGZ1bGwubmFtZXMgPSBUKQoKcmZwLmJnLm1lYW4uczUuczcuczggPC0gbGFwcGx5KHMzLjQuNS42LjcuOC5yZnAuZGFwaSwgZnVuY3Rpb24oYSl7CiAgcmVhZC5jc3YoYSkgJT4lCiAgbXV0YXRlKGZpZWxkID0gc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVClbLG5jb2woc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVCkpLTJdLAogICAgICAgICB0aW1lcG9pbnQgPSBhcy5udW1lcmljKHN0cl9yZW1vdmUoc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVClbLG5jb2woc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVCkpLTFdLCAidCIpKSwKICAgICAgICAgIGNoYW5uZWwgPSBzdHJfc3BsaXQoTGFiZWwsICJfIiwgc2ltcGxpZnkgPSBUKVssbmNvbChzdHJfc3BsaXQoTGFiZWwsICJfIiwgc2ltcGxpZnkgPSBUKSldKSAlPiUKICBtdXRhdGUoY2hhbm5lbCA9IGlmZWxzZShjaGFubmVsID09ICJDNCIsICJEYXBpIiwgIm1jaGVycnkiKSkgJT4lCiAgc2VsZWN0KGZpZWxkLAogICAgICAgICB0aW1lcG9pbnQsCiAgICAgICAgIGNoYW5uZWwsCiAgICAgICAgIE1lYW4sCiAgICAgICAgIE1pbikgJT4lCiAgZ3JvdXBfYnkodGltZXBvaW50LCBmaWVsZCwgY2hhbm5lbCkgJT4lCiAgc3VtbWFyaXNlKGF2Zy5nZnAuYmcgPSBtZWFuKE1lYW4pKSAlPiUKICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY2hhbm5lbCwKICAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9IGF2Zy5nZnAuYmcpCn0pICU+JSBiaW5kX3Jvd3MoKQoKcmZwLmRhcGkuYmcubWVhbnMkYDIwbWluYCA8LSByZnAuZGFwaS5iZy5tZWFucyRgMjBtaW5gICU+JQogIGxlZnRfam9pbiguLHJmcC5iZy5tZWFuLnM1LnM3LnM4LCBieSA9IGMoImZpZWxkIiwgInRpbWVwb2ludCIpKSAlPiUKICBtdXRhdGUoRGFwaSA9IGlmZWxzZShpcy5uYShEYXBpKSwgYXZnLmRhcGkuYmcsIERhcGkpLAogICAgICAgICBtY2hlcnJ5ID0gaWZlbHNlKGlzLm5hKG1jaGVycnkpLCBhdmcucmZwLmJnLCBtY2hlcnJ5KSkgJT4lCiAgc2VsZWN0KC1hdmcuZGFwaS5iZywKICAgICAgICAgLWF2Zy5yZnAuYmcpICU+JQogIHJlbmFtZSgiYXZnLmRhcGkuYmciID0gIkRhcGkiLAogICAgICAgICAiYXZnLnJmcC5iZyIgPSAibWNoZXJyeSIpCmBgYAoKI2FjdHVhbGx5IHN1YnRyYWN0IHRoZSBiYWNrZ3JvdW5kIGludGVuc2l0eSBmcm9tIHRoZSBnZnAgYW5kIG1jaGVycnkgaW50ZW5zaXR5IG9mIHRoZSBjZWxscwpgYGB7cn0KI2ZpcnN0IGZ1bi4gc3ViLmJnLmludGVuc2l0eSBzdWJ0cmFjdHMgdGhlIGJnIGludGVuc2l0eSBmcm9tIGVhY2ggY2VsbC4gCgpnZnAuYmcuc3ViIDwtIHN1Yi5iZy5pbnRlbnNpdHkuZ2ZwKGxpc3Qub2YuZmlsZXMgPSBsaXN0Lm9mLmZpbGVzLmdmcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmcubWVhbnMgPSBnZnAuYmcubWVhbiRgMjBtaW5gKQpnZnAuYmcuc3ViCgpyZnAuZGFwaS5iZy5zdWIgPC0gc3ViLmJnLmludGVuc2l0eS5kYXBpLnJmcChsaXN0Lm9mLmZpbGVzID0gY2VsbF9hdHJpYnV0ZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZy5tZWFucyA9IHJmcC5kYXBpLmJnLm1lYW5zJGAyMG1pbmAgKQoKZ2ZwLmJnLnN1YiRgMjBtaW5gICU+JSAKICBmaWx0ZXIoZ2ZwLm1lYW4uYmcuc3ViID4gMCwKICAgICAgICAgKSAlPiUgCiAgZ3JvdXBfYnkoZmllbGQsIHRpbWVwb2ludCkgJT4lIAogIHRhbGx5KCkgCgpyZnAuZGFwaS5iZy5zdWIkYDIwbWluYCAlPiUgc3BsaXQoLiRmaWVsZCkKCmBgYAoKI2NvbWJpbmUgdGhlIGJhY2tncm91bmQgc3VidHJhY3RlZCBnZnAgZGF0YWZyYW1lIHdpdGggdGhlIGJnIHN1YnRyYWN0ZWQgcmZwL2RhcGkgdG90YWwgYW5kIHB1bmN0YSBkZnMKYGBge3J9CmdmcC5yZnAuZGFwaS5iZy5zdWIgPC0gZ2ZwLmJnLnN1YiRgMjBtaW5gICU+JSAKICBmaWx0ZXIodGltZXBvaW50ICVpbiUgYygxLDMxKSkgJT4lIAogIHNlbGVjdCh1bmlxdWUudHJhY2tJRCwKICAgICAgICAgZ2ZwLm1lYW4uYmcuc3ViLAogICAgICAgICBnZnAuc3VtLmJnLnN1YiwKICAgICAgICAgYXZnLmdmcC5iZywKICAgICAgICAgYXJlYSwKICAgICAgICAgcG9zLngsCiAgICAgICAgIHBvcy55KSAlPiUgCiAgbGVmdF9qb2luKC4scmZwLmRhcGkuYmcuc3ViJGAyMG1pbmAsIGJ5ID0gYygidW5pcXVlLnRyYWNrSUQiLCAiYXJlYSIsInBvcy54IiwicG9zLnkiKSkgJT4lIHNwbGl0KC4kZXhwZXJpbWVudCkKCgpgYGAKCgojZmlsdGVyaW5nIGNlbGxzIHdoaWNoIGhhdmUgbmVnYXRpdmUgYmFja2dyb3VuZCBzdWJ0cmFjdGVkIGludGVuc2l0aWVzIApgYGB7cn0KI1VuaXFlIHRyYWNrSURzIG9mIGNlbGxzIGFib3ZlIHRoZSBiYWNrZ3JvdW5kIGludCBmb3IgZ2ZwLCBkYXBpIGFuZCByZnAgCiN0aGlzIGZ1bmN0aW9uIHJlc3VsdHMgaW4gYSBsaXN0IG9mIHR3byBkZnMuIHRoZSAxc3QgZGYgPSB1bmlxdWV0cmFja0lEcyB3aXRoIHRoZSBleHBlcmltZW50IHRoZXkncmUgZnJvbS4KbGlzdE9mVW5pcXRyYWNrSURfZ2ZwZmlsdGVyZWRkZiA8LSB0cmFja0lELmFidi56ZXJvLmdmcC5yZnAuZGFwaSgKICBiZ19zdWJ0cmFjdGVkX2RmdHAxID0gZ2ZwLnJmcC5kYXBpLmJnLnN1YiwKICBsaXN0X2dmcF9hbGxfdHBzID0gZ2ZwLmJnLnN1YikKYGBgCgpgYGB7cn0KI3RoZSBkZiB3aXRoIGdmcCBpbnRlbnNpdGllcyBmb3IgYWxsIHRpbWVwb2ludHMgd2hpY2ggaXMgZmlsdGVyZWQgZm9yIGNlbGxzIGdmcC5tZWFuLmJnLnN1YiA+IDAgCmxpc3Qub2YuZmlsZXMuYmcuc3ViLmFib3ZlLjAuZ2ZwIDwtIGxpc3RPZlVuaXF0cmFja0lEX2dmcGZpbHRlcmVkZGZbWzJdXSAlPiUgCiAgc3BsaXQoLiRleHBlcmltZW50KQpgYGAKCgoKI3JlbW92aW5nIGNlbGxzIHdpdGggbmVnYXRpdmUgYmFja2dyb3VuZCBzdWJ0cmFjdGVkIGludGVuc2l0aWVzIGZyb20gdGhlIGRhdGFmcmFtZSB3aXRoIHRoZSBjZWxsIGluZm8gZnJvbSB0aW1lcG9pbnQgMSBhbmQgdGhlIGxhc3QgdGltZXBvaW50CmBgYHtyfQpnZnBfcmZwX2RhcGlfYmdzdWJBYnZaZXJvX3RwMSA8LSBsaXN0T2ZVbmlxdHJhY2tJRF9nZnBmaWx0ZXJlZGRmW1sxXV0gJT4lIAogIGxlZnRfam9pbiguLGJpbmRfcm93cyhnZnAucmZwLmRhcGkuYmcuc3ViKSAsIGJ5ID0gYygidW5pcXVlLnRyYWNrSUQiLCAiZXhwZXJpbWVudCIpKQoKZ2ZwX3JmcF9kYXBpX2Jnc3ViQWJ2WmVyb190cDEgJT4lIAogIGdyb3VwX2J5KHRpbWVwb2ludCwgZXhwLmZpZWxkKSAlPiUgCiAgdGFsbHkoKQoKbGlzdC5vZi5maWxlcy5iZy5zdWIuYWJvdmUuMC5nZnAkYDIwbWluYCU+JSAKICBncm91cF9ieSh0aW1lcG9pbnQsIGV4cC5maWVsZCkgJT4lIHRhbGx5KCkKYGBgCiNzMywgczQsIHM1LCBzNiwgczcgYW5kIHM4IG5lZWQgdG8gZml4IHRoZSBiYWNrZ3JvdW5kIHN1YnRyYWN0aW9uCgojZGVuc2l0eSBwbG90IG9mIHRoZSBEQVBJIHN0YWluaW5nLiBIaWdoZXIgREFQSSBzdGFpbmluZyA9PSBkZWFkIGNlbGxzIApgYGB7ciBmaWcuaGVpZ2h0PSA4ICwgZmlnLndpZHRoPSAxM30KI2F0IHRoZSBmaXJzdCB0aW1lcG9pbnQKZ2ZwX3JmcF9kYXBpX2Jnc3ViQWJ2WmVyb190cDEgICU+JSAKICBnZ3Bsb3QoLixhZXMoeCA9IGRhcGkubWVhbi5iZy5zdWIsIGNvbG9yID0gYXMuZmFjdG9yKHRpbWVwb2ludCkpKSsKICBnZW9tX2RlbnNpdHkoYWVzKHk9Li5zY2FsZWQuLikpKwogIGZhY2V0X3dyYXAofmZpZWxkLCBzY2FsZXMgPSAiZnJlZV94IikrCiAgc2NhbGVfeF9sb2cxMCgpKwogIHRoZW1lX3B1YnIoeC50ZXh0LmFuZ2xlID0gNDUpCgoKI2NvcnJlbGF0aW9uIG9mIHRoZSBkYXBpIHN0YWluaW5nIGF0IHRpbWVwaW50IDEgYW5kIHRoZSBsYXN0IHRpbWVwb2ludAojIGdmcF9yZnBfZGFwaV9iZ3N1YkFidlplcm9fdHAxICAlPiUKIyAgIHNlbGVjdChkYXBpLm1lYW4uYmcuc3ViLCB0aW1lcG9pbnQsIGZpZWxkLCB1bmlxdWUudHJhY2tJRCkgJT4lCiMgICBmaWx0ZXIoISh1bmlxdWUudHJhY2tJRCA9PSAiMTAwMDAwMDI1OV8yMG1pbl9zOCIpKSAlPiUgCiMgICBwaXZvdF93aWRlcih2YWx1ZXNfZnJvbSA9IGRhcGkubWVhbi5iZy5zdWIsIG5hbWVzX2Zyb20gPSB0aW1lcG9pbnQpICU+JSAKIyAgIGdncGxvdCguLGFlcyh4ID0gYDFgLCB5ID0gYDMxYCkpKwojICAgZ2VvbV9wb2ludCgpKwojICAgZmFjZXRfd3JhcCh+ZmllbGQsIHNjYWxlcyA9ICJmcmVlX3giKSsKIyAgIHRoZW1lX3B1YnIoeC50ZXh0LmFuZ2xlID0gNDUpCgojdGhlIGFib3ZlIGNvZGUgZGlkIG5vdCB3b3JrIGJlY2F1c2UgdGhlcmUgYXJlIGR1cGxpY2F0ZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gY2VsbCBJRC4gCgojdG8gZmluZCB0aGUgZHVwbGljYXRlcwpnZnBfcmZwX2RhcGlfYmdzdWJBYnZaZXJvX3RwMSAgJT4lIAogIHNlbGVjdChkYXBpLm1lYW4uYmcuc3ViLCB0aW1lcG9pbnQsIGZpZWxkLCB1bmlxdWUudHJhY2tJRCkgJT4lCiAgICBkcGx5cjo6Z3JvdXBfYnkoZmllbGQsIHVuaXF1ZS50cmFja0lELCB0aW1lcG9pbnQpICU+JQogICAgZHBseXI6OnN1bW1hcmlzZShuID0gZHBseXI6Om4oKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lCiAgICBkcGx5cjo6ZmlsdGVyKG4gPiAxTCkKCiNyZW1vdmUgdGhlIGR1cGxpY2F0ZXMgYW5kIGxvb2sgYXQgaG93IGRhcGkgc3RhaW5pbmcgaXMgY2hhbmdpbmcgZnJvbSB0aW1lcG9pbnQgMSB0byB0cCAzMToKI2NvcnJlbGF0aW9uIG9mIHRoZSBkYXBpIHN0YWluaW5nIGF0IHRpbWVwaW50IDEgYW5kIHRoZSBsYXN0IHRpbWVwb2ludApnZnBfcmZwX2RhcGlfYmdzdWJBYnZaZXJvX3RwMSAgJT4lCiAgc2VsZWN0KGRhcGkubWVhbi5iZy5zdWIsIHRpbWVwb2ludCwgZmllbGQsIHVuaXF1ZS50cmFja0lEKSAlPiUKICBmaWx0ZXIoISh1bmlxdWUudHJhY2tJRCA9PSAiMTAwMDAwMjA3MV8yMG1pbl9zOCIpKSAlPiUgCiAgcGl2b3Rfd2lkZXIodmFsdWVzX2Zyb20gPSBkYXBpLm1lYW4uYmcuc3ViLCBuYW1lc19mcm9tID0gdGltZXBvaW50KSAlPiUgCiAgZ2dwbG90KC4sYWVzKHggPSBgMWAsIHkgPSBgMzFgKSkrCiAgZ2VvbV9wb2ludCgpKwogIGZhY2V0X3dyYXAofmZpZWxkLCBzY2FsZXMgPSAiZnJlZV94IikrCiAgdGhlbWVfcHVicih4LnRleHQuYW5nbGUgPSA0NSkKYGBgCgoKI2dldCB0aGUgdGhyZXNob2xkIG9mIGRhcGkgYWJvdmUgd2hpY2ggdGhlIGNlbGxzIHdpbGwgYmUgZGVlbWVkIGRlYWQhIQpgYGB7ciBmaWcuaGVpZ2h0PSA4ICwgZmlnLndpZHRoPSAxM30KI3NwbGl0IHRoZSBkZiBpbnRvIHRoZSBleHBlcmltZW50cyBzbyB0aGF0IHRoZXJlIGlzIGEgZGVhZCBjZWxsIHRocmVzaG9sZCBmb3IgZXZlcnkgZXhwZXJpbWVudCAKZGVhZGNlbGxfdGVtcF9kZiA8LSBnZnBfcmZwX2RhcGlfYmdzdWJBYnZaZXJvX3RwMSAlPiUgCiAgc3BsaXQoLiRleHBlcmltZW50KSAKCgpkZWFkQ2VsbF9ib3VuZHJ5IDwtIGRhcGkudGhyZXNob2xkKGRmX2Zvcl90aHJlc2hvbGQgPSBkZWFkY2VsbF90ZW1wX2RmICwgbG93ZXJfbGltID0gMTAwLCB1cHByX2xpbSA9IDMwMCApICU+JSAKICByZW5hbWUoImV4cC5maWVsZCIgPSAiZXhwZXJpbWVudCIpCgoKI2F0IHRoZSBmaXJzdCB0aW1lcG9pbnQKZ2ZwX3JmcF9kYXBpX2Jnc3ViQWJ2WmVyb190cDEgJT4lIAogIGZpbHRlcih0aW1lcG9pbnQgPT0gMSkgJT4lIAogIGxlZnRfam9pbiguLGRlYWRDZWxsX2JvdW5kcnkgLCBieSA9ICJleHAuZmllbGQiKSAlPiUgCiAgZ2dwbG90KC4sYWVzKHggPSBkYXBpLm1lYW4uYmcuc3ViLCBjb2xvciA9IHNhbXBsZSkpKwogIGdlb21fZGVuc2l0eShhZXMoeT0uLnNjYWxlZC4uKSkrCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gYygxMDAsIDMwMCkpKwogIGZhY2V0X3dyYXAofmV4cC5maWVsZCwgc2NhbGVzID0gImZyZWVfeCIpKwogIHNjYWxlX3hfbG9nMTAoKSsKICBhbm5vdGF0aW9uX2xvZ3RpY2tzKCkrCiAgdGhlbWVfcHVicih4LnRleHQuYW5nbGUgPSA0NSkKCmBgYAoKCiNyZW1vdmluZyBjZWxscyB3aXRoIGRhcGkgaW50ZW5zaXR5IGdyZWF0ZXIgdGhhbiB0aGUgZGFwaSB0aHJlc2hvbGQgc2V0CmBgYHtyfQojZ2V0dGluZyB0aGUgSURzIG9mIHRoZSBjZWxscyByZW1haW5pbmcgYWZ0ZXIgcmVtb3ZpbmcgdGhlIGNlbGxzIHdpdGggaGlnaGVyIHRoYW4gdGhyZXNob2xkIGRhcGkgaW50ZW5zaXR5LiB1c2UgdGhpcyB0byBmaWx0ZXIgY2VsbHMgZnJvbSB0aGUgZGYgd2l0aCBtY2hlcnJ5IGFuZCBnZnAgdGltZWxhcHNlIGluZm9ybWF0aW9uCiN3aWxsIHJlbW92ZSBkZWFkIGNlbGxzIGZyb20gdGhlIGZpcnN0IHRpbWVwb2ludCAKZGFwaS5maWx0ZXJlZC5jZWxsc1RyYWNrSUQgPC0gYmluZF9yb3dzKGRlYWRjZWxsX3RlbXBfZGYpICU+JSAKICBmaWx0ZXIodGltZXBvaW50ICVpbiUgYygxLDMxKSkgJT4lIAogIGxlZnRfam9pbiguLGRlYWRDZWxsX2JvdW5kcnksIGJ5ID0gImV4cC5maWVsZCIpICU+JSAKICBmaWx0ZXIoZGFwaS5tZWFuLmJnLnN1YiA8IGRhcGkudGhyZXNob2xkKSAlPiUgcHVsbCh1bmlxdWUudHJhY2tJRCkKCiNkZiB3aXRoIGZsdW9yZXNjZW50IGludGVuc2l0aWVzIG9mIGdmcCwgcmZwIGFuZCBkYXBpIGZvciBsaXZlIGNlbGxzIGF0IHRwID0xIGFudCB0cCA9IDMxLgpsaXZlQ2VsbHNSRlAuREFQSS5HRlAgPC0gZ2ZwX3JmcF9kYXBpX2Jnc3ViQWJ2WmVyb190cDEgJT4lIAogIGxlZnRfam9pbiguLGRlYWRDZWxsX2JvdW5kcnksIGJ5ID0gImV4cC5maWVsZCIpICU+JSAKICBmaWx0ZXIoZGFwaS5tZWFuLmJnLnN1YiA8IGRhcGkudGhyZXNob2xkKQoKCiNkZiB3aXRoIGRlYWQgY2VsbHMgcmVtb3ZlZCB0aGlzIGRmIGhhcyBnZnAgaW50ZW5zaXRpZXMgZm9yIGFsbCB0aGUgdGltZXBvaW50IHdoaWNoIGFyZSBmaWx0ZXJlZCBmb3IgZGVhZCBjZWxscyAKbmV3LmdmcExpdmVDZWxscyA8LSAgYmluZF9yb3dzKGxpc3Qub2YuZmlsZXMuYmcuc3ViLmFib3ZlLjAuZ2ZwKSAlPiUgCiAgZmlsdGVyKHVuaXF1ZS50cmFja0lEICVpbiUgbGl2ZUNlbGxzUkZQLkRBUEkuR0ZQJHVuaXF1ZS50cmFja0lEKQpgYGAKCmBgYHtyfQpiaW5kX3Jvd3MoZGVhZGNlbGxfdGVtcF9kZikgJT4lIAogIGZpbHRlcih0aW1lcG9pbnQgJWluJSBjKDEsMzEpKSAlPiUgCiAgbGVmdF9qb2luKC4sZGVhZENlbGxfYm91bmRyeSwgYnkgPSAiZXhwLmZpZWxkIikgJT4lIAogIGZpbHRlcihkYXBpLm1lYW4uYmcuc3ViIDwgZGFwaS50aHJlc2hvbGQpICU+JSAKICBmaWx0ZXIodGltZXBvaW50ID09IDMxLCBmaWVsZCA9PSAiczciKQpgYGAKCiNzYXZpbmcgdGhlIGRhdGFmcmFtZSB3aXRoIHRoZSBiYWNrZ3JvdW5kIHN1YnRyYWN0ZWQsIGRlYWQgY2VsbHMgZmlsdGVyZWQgaW50ZW5zaXRpZXMgb2YgZ2ZwcyBmcm9tIHRoZSBhdXRvZmx1b3IgY2VsbHMgKE1SRykgYW5kIHRoZSBnZnAgcG9zaXRpdmUgY2VsbHMuIApgYGB7cn0KbmV3LmdmcExpdmVDZWxscyAlPiUgCiAgd3JpdGVfY3N2KC4scGF0aCA9ICJ+L3Bsb3RzL3B1cDEtcmZwLWdmcC1kZWNheS82LTI4LTIyLW1vZGMtZ2ZwL2RhdGEvcmF3X2dmcF9pbnRfYWxsLmNzdiIpCmBgYAoKCmxvb2tpbmcgYXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiByZnAgYW5kIGdmcCBpbiB0aGUgbGl2ZSBjZWxscyAKYGBge3J9CiNhdXRvZmx1cmVzZW5jZSBvZiBwdXAxLXJmcApsaXZlQ2VsbHNSRlAuREFQSS5HRlAgJT4lIAogIGZpbHRlcih0aW1lcG9pbnQgPT0gMSkgJT4lIAogIGdncGxvdCguLGFlcyh4ID1yZnAubWVhbi5iZy5zdWIgLCBjb2xvciA9IHNhbXBsZSkgKSsKICBnZW9tX2RlbnNpdHkoYWVzKHkgPSAuLnNjYWxlZC4uKSkrCiAgc2NhbGVfeF9sb2cxMCgpKyAKICBmYWNldF93cmFwKH5leHBlcmltZW50KSsKICBhbm5vdGF0aW9uX2xvZ3RpY2tzKCkKCmxpdmVDZWxsc1JGUC5EQVBJLkdGUCAlPiUgCiAgZmlsdGVyKHRpbWVwb2ludCA9PSAxKSAlPiUgCiAgZmlsdGVyKHNhbXBsZSA9PSAicG9zLnNpZ25hbCIpICU+JSAKICBnZ3Bsb3QoLixhZXMoeCA9cmZwLm1lYW4uYmcuc3ViLnB1bmN0YSAsIHkgPSBnZnAubWVhbi5iZy5zdWIpICkrCiAgZ2VvbV9wb2ludCgpKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpKwogIHNjYWxlX3hfbG9nMTAoKSsgCiAgc2NhbGVfeV9sb2cxMCgpCgoKI2F1dG9mbHVvcmVzY2VuY2UgdnMgZ2ZwIHNpZ25hbCAKbGl2ZUNlbGxzUkZQLkRBUEkuR0ZQICU+JSAKICBmaWx0ZXIodGltZXBvaW50ID09IDEpICU+JSAKICBnZ3Bsb3QoLixhZXMoeCA9IGdmcC5tZWFuLmJnLnN1YiwgY29sb3IgPSBzYW1wbGUpKSsKICBnZW9tX2RlbnNpdHkoYWVzKHkgPSAuLnNjYWxlZC4uKSkrCiAgc2NhbGVfeF9sb2cxMCgpKwogIGZhY2V0X3dyYXAofmZpZWxkLCBzY2FsZXMgPSAiZnJlZV94IikKYGBgCgojcGxvdHRpbmcgbGluZSBwbG90cyByYXcgd2l0aG91dCBhbnkgQUYgZmlsdGVyaW5nIApgYGB7cn0KYmluZF9yb3dzKG5ldy5nZnBMaXZlQ2VsbHMpJT4lCiAgIyBmaWx0ZXIoZmllbGQgJWluJSBjKCJzNyIsInM4IikpICU+JSAKICBnZ3Bsb3QoLixhZXModGltZXBvaW50LCBnZnAubWVhbi5iZy5zdWIsIGdyb3VwID0gdW5pcXVlLnRyYWNrSUQgLGNvbG9yID0gc2FtcGxlKSkrCiAgZ2VvbV9saW5lKGFscGhhID0gMC4yKSsKICBmYWNldF93cmFwKH5maWVsZCwgc2NhbGVzID0gImZyZWVfeSIpCiMgZ2dzYXZlKGZpbGVuYW1lPSJsbi1tcmdfdnNfZ2ZwLnBuZyIsIHBsb3Q9IGxhc3RfcGxvdCgpICwgcGF0aCA9ICJ+L3Bsb3RzLzctMi0yMC9wbG90c190aGVzaXNfY29tX21lZXQtMjAyMC8iICwgd2lkdGggPSAxMyAsIGhlaWdodCA9IDgsIGJnID0gInRyYW5zcGFyZW50IikKCm5ldy5nZnBMaXZlQ2VsbHMgJT4lIAogIGdncGxvdCguLGFlcyhyZWFsLnRpbWUuZ2ZwLCBnZnAubWVhbi5iZy5zdWIsIGdyb3VwID0gdW5pcXVlLnRyYWNrSUQgLGNvbG9yID0gc2FtcGxlKSkrCiAgZ2VvbV9saW5lKGFscGhhID0gMC4yKSsKICBmYWNldF93cmFwKH5maWVsZCwgc2NhbGVzID0gImZyZWVfeSIpCiAgIyBhbm5vdGF0aW9uX2xvZ3RpY2tzKCkKYGBgCgoKI0ZpbHRlcmluZyBjZWxscyBiYXNlZCBvbiBhdXRvZmx1b3Jlc2NlbmNlIAoKIyNnZXR0aW5nIHRoZSBhdXRvZmx1b3Jlc2NlbmNlIHRocmVzaG9sZCBmb3IgZ2ZwIGFuZCBtY2hlcnJ5IApgYGB7cn0KYmluZF9yb3dzKG5ldy5nZnBMaXZlQ2VsbHMpICU+JSAKICBmaWx0ZXIoZXhwZXJpbWVudCA9PSAiMjBtaW4iKSAlPiUgCiAgZ2dwbG90KC4sYWVzKHggPSBnZnAubWVhbi5iZy5zdWIsIGNvbG9yID0gc2FtcGxlKSkrCiAgZ2VvbV9kZW5zaXR5KGFlcyh5ID0gLi5zY2FsZWQuLikpKwogIGZhY2V0X3dyYXAofnRpbWVwb2ludCAsIHNjYWxlcyA9ICJmcmVlX3giKSsKICBzY2FsZV94X2xvZzEwKCkKCmxpdmVDZWxsc1JGUC5EQVBJLkdGUCAlPiUgCiAgZmlsdGVyKHRpbWVwb2ludCA9PSAzMSkgJT4lIAogICMgZmlsdGVyKGV4cGVyaW1lbnQgPT0gIjIwbWluIikgJT4lIAogIGdncGxvdCguLGFlcyh4ID0gZ2ZwLm1lYW4uYmcuc3ViLCBjb2xvciA9IHNhbXBsZSkpKwogIGdlb21fZGVuc2l0eShhZXMoeSA9IC4uc2NhbGVkLi4pKSsKICBmYWNldF93cmFwKH5leHBlcmltZW50ICwgc2NhbGVzID0gImZyZWVfeCIpKwogIHNjYWxlX3hfbG9nMTAoKQoKbGl2ZUNlbGxzUkZQLkRBUEkuR0ZQICU+JSAKICBmaWx0ZXIodGltZXBvaW50ID09IDMxKSAlPiUgCiAgIyBmaWx0ZXIoZXhwZXJpbWVudCA9PSAiMjBtaW4iKSAlPiUgCiAgZ2dwbG90KC4sYWVzKHggPSBnZnAubWVhbi5iZy5zdWIsIHkgPSBkYXBpLm1lYW4uYmcuc3ViICwgY29sb3IgPSBmaWVsZCkpKwogIGdlb21fcG9pbnQoKSsKICBmYWNldF93cmFwKH5leHBlcmltZW50ICwgc2NhbGVzID0gImZyZWVfeCIpCgpgYGAKCgoKYGBge3J9CiNHZXR0aW5nIHRoZSBnZnAgdGhyZXNob2xkIGZvciBmaWx0ZXJpbmcgY2VsbHMgYmVsb3cgdGhpcyB0aHJlc2hvbGQgc2V0IHVwIGJhc2VkIG9uIGFsbCB0aGUgMzEgdGltZSBwb2ludHMgZm9yIHRoZSBtcmcgY2VsbHMgCmdmcC5taW4uaW50IDwtIGdmcC50aGVyc2hvbGQuMzF0cCgKICBsaXN0Lm9mLmZpbGVzLmJnLnN1Yi5hYm92ZS4wID0gbmV3LmdmcExpdmVDZWxscyAlPiUgCiAgICBzcGxpdCguJGV4cGVyaW1lbnQpKQoKCiNHZXR0aW5nIHRoZSBtY2hlcnJ5IHRocmVzaG9sZCBmb3IgZmlsdGVyaW5nIGNlbGxzIGJlbG93IHRoaXMgdGhyZXNob2xkIHNldCB1cCBiYXNlZCBvbiBhbGwgdGhlIDMxIHRpbWUgcG9pbnRzIGZvciB0aGUgbXJnIGNlbGxzIApyZnAubWluLmludCA8LSByZnAudGhlcnNob2xkLjMxdHAudGVtcChsaXN0Lm9mLmZpbGVzLmJnLnN1Yi5hYm92ZS4wID0gbGl2ZUNlbGxzUkZQLkRBUEkuR0ZQICkKCnJmcC5taW4uaW50IDwtIHJmcC5taW4uaW50ICU+JSBtdXRhdGUocHVwMV90aHJlc2hvbGQgPSAyMCkKCgpgYGAKCiNmaWx0ZXJpbmcgYmFzZWQgb24gcHVwMS1yZnAgZXhwcmVzc2lvbiAKIyNmaWx0ZXJpbmcgY2VsbHMgd2hpY2ggYXJlIGFib3ZlIHRoZSBnZnAgYW5kIHJmcCB0aHJlc2hvbGQgCkluIHRoZSBmaWx0ZXIuY2VsbHMuYmVsb3cuYXV0b2ZsdW9yLjMxdHAuZ2ZwVjIoKSBmdW5jdGlvbiwgdGhlIGZ1bmN0aW9uIGxvb2tzIGZvciB0aGUgY29sdW1uIG5hbWVkICJ0aHJlc2hvbGQiIGFuZCBJIG5lZWQgdG8gZGVjaWRlIHdoaWNoIGNvbHVtbiB3aWxsIGJlIHRocmVzaG9sZCBiYXNlZCBvbiB0aGUgb3ZlcmxhcCBvZiB0aGUgbmVnIGFuZCBwb3NpdGl2ZSBjZWxscy4gVGhpcyBpcyBiZWNhdXNlIHRoZXJlIGFyZSBjZWxscyB3aGljaCBiZWNvbWUgZGVhZC9iZWNvbWUgaW4gZm9jdXMgYXMgeW91IGtlZXAgdGFraW5nIGltYWdlcyB3aGljaCBtaWdodCBzdWRkZW5seSBpbmNyZWFzZSB0aGUgOTV0aCBxdWFudGlsZSBpbnRlbnNpdHkgb2YgdGhlIG5lZ2F0aXZlIGNlbGxzLiAKYGBge3J9CiNnZXQgYSBmaWx0ZXJlZCBkZiBvZiBjZWxscyBwYXNzaW5nIHRoZSBnZnAgdGhyZXNob2xkIHNldCBhYm92ZSAKI3RoaXMgZnVuY3Rpb24gYmVsb3cgZmlyc3QgcmVtb3ZlcyBjZWxscyB3aXRoIHB1cDEtcmZwIGxlc3MgdGhhbiB0aGUgdGhyZXNob2xkIHNldC4gCiNUaGVuIGl0IHJlbW92ZXMgdGhlIGNlbGxzIHdpdGggbGVzcyB0aGFuIEFGIHRocmVzaG9sZCBzZXQgYXQgdHAgPTEgCiNBZnRlciB0aGF0IGl0IHN1YnRyYWN0cyB0aGUgYWYgdmFsdWUgZnJvbSBldmVyeSBjZWxsIGZvciBldmVyeSB0aW1lcG9pbnQsIGFuZCBpZiB0aGUgc3VidHJhY3RlZCB2YWx1ZSBpcyBsZXNzIHRoYW4gMSBpdCBtYWtlcyBpdCBOQS4gCgpjZWxscy5maWx0ZXJlZC5kZi4zMXRwIDwtIGZpbHRlci5jZWxscy5iZWxvdy5hdXRvZmx1b3IuMzF0cC5nZnBWMigKICBkZl9yZnBfZGFwaV9nZnAgPSBsaXZlQ2VsbHNSRlAuREFQSS5HRlAsCiAgCiAgcmZwX21pbl9pbnQgPSByZnAubWluLmludCAlPiUgcmVuYW1lKCJxdWFudF85NSIgPSAidGhyZXNob2xkXzk1IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aHJlc2hvbGRfOTUiID0gInB1cDFfdGhyZXNob2xkIiksCiAgCiAgZ2ZwX2xpdmVfY2VsbHNfbGlzdCA9IG5ldy5nZnBMaXZlQ2VsbHMgJT4lIHNwbGl0KC4kZXhwZXJpbWVudCksCiAgCiAgZ2ZwX21pbl9pbnQgPSBnZnAubWluLmludCAlPiUgCiAgICBtdXRhdGUodGhyZXNob2xkID0gdGhyZXNob2xkXzk1ICkKKQoKZmlsdGVyZWQuZGYubmV3LndvLmFmLjMxdHAgPC0gY2VsbHMuZmlsdGVyZWQuZGYuMzF0cCRmaWx0ZXJlZC5kZi5uZXcgJT4lIAogIGJpbmRfcm93cygpICU+JSAKICBmaWx0ZXIoc2FtcGxlID09ICJwb3Muc2lnbmFsIikgJT4lIAogIHNwbGl0KC4kZXhwZXJpbWVudCkKCnVuaXF1ZShmaWx0ZXJlZC5kZi5uZXcud28uYWYuMzF0cCRgMjBtaW5gJHRpbWVwb2ludCkKCiAgCmBgYAoKcmVtb3ZlIHRoZSBmaXJzdCB0d28gYmx1cnJ5IGltYWdlcyBmcm9tIHM3CmBgYHtyfQojIGZpbHRlcmVkLmRmLm5ldy53by5hZi4zMXRwJGAyMG1pbmAgPC0gZmlsdGVyZWQuZGYubmV3LndvLmFmLjMxdHAkYDIwbWluYCAlPiUgZmlsdGVyKGZpZWxkID09ICJzNyIpCiMgICBmaWx0ZXIoIShmaWVsZCA9PSAiczciICYgdGltZXBvaW50ICVpbiUgYygxLDIpKSkgCgpgYGAKCgojbWFraW5nIGRmIGZvciBidWxrIHJlZ3Jlc3Npb24KYGBge3J9CiMjI1RoaXMgZnVuY3Rpb24gY3JlYXRzIHRoZSBkZiBmb3IgZml0dGluZyB0aGUgMjQgbW9kZWxzIAojIGxpc3QuZGYubW9kZWwgPC0gZGYubW9kZWwoZmlsdGVyZWQuZGYubmV3ID0gZmlsdGVyZWQuZGYubmV3LndvLmFmKQpkZi5tb2RlbC4zMXRwLmdmcCA8LSBkZi5tb2RlbC5nZnAoZmlsdGVyZWQuZGYubmV3ID0gZmlsdGVyZWQuZGYubmV3LndvLmFmLjMxdHApCmRmLm1vZGVsLjMxdHAuZ2ZwCgojIyMjVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIGRmIHdoZXJlIHlvdSBzdWJ0cmFjdCB0aGUgdD0wIGludGVuc2l0eSB3aXRoIGFsbCB0aGUgb3RoZXIgaW50ZW5zaXRpZXMgZm9yIGdmcApmaW5hbC5kYXRhLjMxdHAuZ2ZwIDwtIGNsZWFuLmRmLm1vZGVsaW5nLmdmcChkYXRhLmdmcCA9IGRmLm1vZGVsLjMxdHAuZ2ZwKQoKZmluYWwuZGF0YS4zMXRwLmdmcCAlPiUgZmlsdGVyKGV4cC5maWVsZCA9PSAiMjBtaW5fczciKQpgYGAKCgpPbiAxLzI4LzIxIHRhbGtlZCB0byBwcmVtYWwgYWJvdXQgZmlsdGVyaW5nOiAKMS4gUmVtb3ZlIGNlbGxzIHdoaWNoIGhhdmUgcG9zaXRpdmUgZGVsdGEgSW50ZW5zaXR5IG1vcmUgdGhhbiAyIHRpbWVzIApgYGB7cn0KI2dldHRpbmcgSURzIG9mIGNlbGxzIHdoaWNoIGhhdmUgcG9zaXRpdmUgaW50ZW5zaXR5IHZhbHVlcyBmb3IgbGVzcyB0aGFuIDIgdGltZXBvaW50cyAKaWRzLmludC4yIDwtIGZpbmFsLmRhdGEuMzF0cC5nZnAgJT4lIAogIGdyb3VwX2J5KHVuaXF1ZS50cmFja0lEKSAlPiUgCiAgdGFsbHkobG4uZ2ZwLmRpZiA+IDApICU+JSAKICBmaWx0ZXIobjwyKSAlPiUgICAgICAgICAgICAja2VlcCBjZWxscyB3aGljaCBoYXZlIGxlc3MgdGhhbiB0d28gcG9zaXRpdmUgaW50ZW5zaXR5IHZhbHVlcwogIHB1bGwodW5pcXVlLnRyYWNrSUQpCgojZmlsdGVyaW5nIGNlbGxzIHdoaWNoIGhhdmUgdHJhY2tJRCBpbiB0aGUgYWJvdmUgdmVjdG9yICAKI2dmcAp0ZW1wLnBvc0ludEJsdzIuZ2ZwIDwtIGZpbmFsLmRhdGEuMzF0cC5nZnAgJT4lIAogIGZpbHRlcih1bmlxdWUudHJhY2tJRCAlaW4lIGlkcy5pbnQuMikgCgpkZl9mb3JfTWVjaGFuaXN0aWNNb2RlbCA8LSB0ZW1wLnBvc0ludEJsdzIuZ2ZwICAlPiUKICBsZWZ0X2pvaW4oCiAgICAuLAogICAgYmluZF9yb3dzKGZpbHRlcmVkLmRmLm5ldy53by5hZi4zMXRwKSAsCiAgICBieSA9IGMoCiAgICAgICJ1bmlxdWUudHJhY2tJRCIsCiAgICAgICJ0aW1lcG9pbnQiICwKICAgICAgImV4cGVyaW1lbnQiICwKICAgICAgImdmcC5tZWFuLmJnLmFmLnN1Yi5uZXciICwKICAgICAgImV4cC5maWVsZCIKICAgICkKICApCgojc2F2ZSB0aGlzIGRhdGFmcmFtZSBmb3IgaGFsZiBsaWZlIGVzdGltYXRpb24KCmBgYAoKCgpgYGB7cn0KY2VsbF9hdHJpYnV0ZXNfZmluYWwgPC0gZGZfZm9yX01lY2hhbmlzdGljTW9kZWwgJT4lIAogIGZpbHRlcih0aW1lcG9pbnQgPT0gMSkgICU+JSAKICBsZWZ0X2pvaW4oLixsaXZlQ2VsbHNSRlAuREFQSS5HRlAgJT4lIHNlbGVjdCh1bmlxdWUudHJhY2tJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwLmZpZWxkLGV4cGVyaW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmZwLm1lYW4uYmcuc3ViLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJmcC5tZWFuLmJnLnN1Yi5wdW5jdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFwaS5tZWFuLmJnLnN1YiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXBpLm1lYW4uYmcuc3ViLnB1bmN0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZnAuc3VtLmJnLnN1YiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZnAuc3VtLmJnLnN1Yi5wdW5jdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFwaS5zdW0uYmcuc3ViLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcGkuc3VtLmJnLnN1Yi5wdW5jdGEpLCAKICAgICAgICAgICAgYnkgPSBjKCJ1bmlxdWUudHJhY2tJRCIsICJ0aW1lcG9pbnQiLCAiZXhwLmZpZWxkIiwgImV4cGVyaW1lbnQiKSkgCgpjZWxsX2F0cmlidXRlc19maW5hbCAlPiUgZ3JvdXBfYnkoZXhwLmZpZWxkKSAlPiUgdGFsbHkoKQoKd3JpdGVfY3N2KGNlbGxfYXRyaWJ1dGVzX2ZpbmFsLGZpbGUgPSAiL2hvbWUvRGFzL3Bsb3RzL3B1cDEtcmZwLWdmcC1kZWNheS82LTI4LTIyLW1vZGMtZ2ZwL2RhdGEvNi0yOC0yMl9tT0RDX3B1cDFfYXR0cmlidXRlcy5jc3YiKQogIAoKYGBgCgojc2F2aW5nIHRoZSBkYXRhIApgYGB7cn0KZ2ZwX21PRENQZXN0X2ZpbHRlcmVkIDwtIGRmX2Zvcl9NZWNoYW5pc3RpY01vZGVsICAlPiUKICByZW5hbWUoImNlbGwuaWQiID0gInVuaXF1ZS50cmFja0lEIiwKICAgICAgICAgImdmcFN1bUJnQUZzdWIiID0gImdmcC5zdW0uYmcuYWYuc3ViIiwKICAgICAgICAgImdmcE1lYW5CZ0FGc3ViIj0iZ2ZwLm1lYW4uYmcuYWYuc3ViLm5ldyIsCiAgICAgICAgICJuYXQubG9nLkdmcE1lYW4iID0gImxuLmdmcCIgLCAKICAgICAgICAgImRlbHRhLmludCIgPSAibG4uZ2ZwLmRpZiIsCiAgICAgICAgICJkZWx0YS50aW1lIiA9ICJ0aW1lIgogICAgICAgICApICU+JSAKICBzZWxlY3QoIGNlbGwuaWQsCiAgICAgICAgIGdmcFN1bUJnQUZzdWIsCiAgICAgICAgIGdmcE1lYW5CZ0FGc3ViLAogICAgICAgICBuYXQubG9nLkdmcE1lYW4sCiAgICAgICAgIGRlbHRhLnRpbWUsCiAgICAgICAgIGltYWdlLm5vLAogICAgICAgICBkZWx0YS5pbnQsIAogICAgICAgICBleHAuZmllbGQKICAgICAgICAgKQoKd3JpdGVfY3N2KGdmcF9tT0RDUGVzdF9maWx0ZXJlZCAsIGZpbGUgPSAifi9wbG90cy9wdXAxLXJmcC1nZnAtZGVjYXkvNi0yOC0yMi1tb2RjLWdmcC9kYXRhL2dmcF9tT0RDUGVzdF9wdXAxX2ZpbHRlcmVkLmNzdiIpCmBgYAoKI1NBVklORyBUSEUgREFUQUZSQU1FIFdISUNIIEhBUyBBTEwgVEhFIEJBQ0tHUk9VTkQgSU5ULCBBVVRPRkxVT1IgSU5URU5TSVRZIChBVCBUSEUgSU5URVJTRUNUSU9OLCBUSEUgODBUSCBBTkQgVEhFIDk1VEggUVVBTlRJTEUgT0YgTVJHIEFVVE8gR0ZQIElOVEVOU0lUWSkKCmBgYHtyfQp3cml0ZV9jc3YoZGZfZm9yX01lY2hhbmlzdGljTW9kZWwgLCBmaWxlID0gIn4vcGxvdHMvcHVwMS1yZnAtZ2ZwLWRlY2F5LzYtMjgtMjItbW9kYy1nZnAvZGF0YS9nZnBfbU9EQ1Blc3RfcHVwMV9yYXdfZGF0YS5jc3YiKQpgYGAKCmBgYHtyfQpnZnBfbU9EQ1Blc3RfZmlsdGVyZWQgJT4lIAogIGdncGxvdCguLGFlcyhkZWx0YS50aW1lLCBnZnBNZWFuQmdBRnN1YiwgZ3JvdXAgPSBjZWxsLmlkKSkrCiAgZ2VvbV9saW5lKGFscGhhID0gMC4yKSsKICBmYWNldF93cmFwKH5leHAuZmllbGQsIHNjYWxlcyA9ICJmcmVlX3kiKQoKYGBgCgoKCmdldHRpbmcgdGhlIGFyZWEgb2YgdGhlIHB1bmN0YSBpbmZvcm1hdGlvbgoKI2dldHRpbmcgdGhlIHB1cDEtcmZwIHB1bmN0YSBpbmZvCiMjdXNlIHRoZSBwdXAxX3N1cmZhY2UgaW5mbyBmcm9tIEltYXJpcwpgYGB7cn0KRmlsZXNUb1JlYWREQVBJUkZQIDwtIGMoIkMwX0FyZWEiLCAKICAgICAgICAgICAgIkMwX0JvdW5kaW5nQm94T09fTGVuZ3RoX0IiLAogICAgICAgICAgICAiQzBfQm91bmRpbmdCb3hPT19MZW5ndGhfQyIsCiAgICAgICAgICAgICJDMF9FbGxpcHNvaWRfQXhpc19MZW5ndGhfQiIsCiAgICAgICAgICAgICJDMF9FbGxpcHNvaWRfQXhpc19MZW5ndGhfQyIsCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfQ2VudGVyX0NoPTQiLAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X01lYW5fQ2g9NCIsIAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X01lZGlhbl9DaD00IiwKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9TdW1fQ2g9NCIsCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfQ2VudGVyX0NoPTUiLAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X01lYW5fQ2g9NSIsIAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X01lZGlhbl9DaD01IiwKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9TdW1fQ2g9NSIsCiAgICAgICAgICAgICJDMF9OdW1iZXJfb2ZfVm94ZWxzIiwgCiAgICAgICAgICAgICJDMF9OdW1iZXJfb2ZfVHJpYW5nbGVzIiwKICAgICAgICAgICAgIkMwX1NwaGVyaWNpdHkiLCAKICAgICAgICAgICAgIkMwX1ZvbHVtZS5jc3YiLCAKICAgICAgICAgICAgIkMwX1Bvc2l0aW9uX1guY3N2IiwKICAgICAgICAgICAgIkMwX1Bvc2l0aW9uX1kuY3N2IiwKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9NYXhfQ2g9NiIsCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfQ2VudGVyX0NoPTYiKQpgYGAKCiNmaXJzdCBnZXQgdGhlIGluZm8gb2YgdGhlIGNlbGwgc3VyZmFjZSB0aGVuIG1hdGNoIGVhY2ggY2VsbCBzdXJmYWNlIHdpdGggdGhlIHB1cDEgcHVuY3RhLiAKZG8gbm90IGluY2x1ZGUgdGhlIE1SRyBjZWxscyBhcyB0aGV5IGhhdmUgbm8gcHVwMS1yZnAgcHVuY3RhIG1hc2sKYGBge3J9CmRhcGlfcHVwMV9pbWFyaXNfY2VsbHMgPC0gZGlyKCJ+L0ltYXJpcy1kYXRhLzIwMjIvcHVwMV9yZnAvNi0yOC0yMi9tb2RjLXB1cDEvaW1hcmlzL3N1cmZhY2UvY2VsbHMiLCBmdWxsLm5hbWVzID0gVFJVRSkgCgpsaXN0Lm9mLmZpbGVzLmRhcGkucHVwMSA8LSBnZXQuaW1hcmlzLmluZm8uZGFwaV9wdXAxLnN1cmZhY2UoZGlyLm5hbWVzID0gZGFwaV9wdXAxX2ltYXJpc19jZWxscywgZmlsZXNfdG9fcmVhZCA9IEZpbGVzVG9SZWFkREFQSVJGUCkgI3VwZGF0ZWQgdGhpcyBmdW5jdGlvbiB0byBub3QgaW5jbHVkZSB0cmFja0lEcwoKbGlzdC5vZi5maWxlcy5kYXBpLnB1cDEgCmBgYAoKCiNHZXR0aW5nIHRoZSBwdXAxIHB1bmN0YSBzdXJmYWNlIGluZm8gCmBgYHtyfQpwdXAxX3N1cmZhY2VfaW1hcmlzIDwtIGRpcigifi9JbWFyaXMtZGF0YS8yMDIyL3B1cDFfcmZwLzYtMjgtMjIvbW9kYy1wdXAxL2ltYXJpcy9zdXJmYWNlL3B1cDEiLCBmdWxsLm5hbWVzID0gVFJVRSkgCgpwdXAxX3B1bmN0YSA8LSBnZXQuaW1hcmlzLmluZm8uZGFwaV9wdXAxLnN1cmZhY2UoZGlyLm5hbWVzID0gcHVwMV9zdXJmYWNlX2ltYXJpcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc190b19yZWFkID0gRmlsZXNUb1JlYWREQVBJUkZQKSAKcHVwMV9wdW5jdGEKYGBgCgoKI2NvbWJpbmUgdGhlIGNlbGwgc3VyZmFjZSBpbmZvIHdpdGggdGhlIHB1cDEgcHVuY3RhIGluZm8uIApgYGB7cn0KI3RoaXMgc2hvdWxkIGhhdmUgNjUxMiBuby4gb2YgY2VsbHMgCnB1cDEuZGFwaS5jZWxsLnB1bmN0YSA8LSBsaXN0Lm9mLmZpbGVzLmRhcGkucHVwMSAlPiUgI2RmIHdpdGggZW50aXJlIGNlbGwgc2VnbWVudGVkIAogIHNlbGVjdCgKICAgIGFyZWEsCiAgICBwb3MueCwKICAgIHBvcy55LAogICAgdGltZXBvaW50LAogICAgYWxsLm1hc2suaW50Lm1heCwKICAgIGFsbC5tYXNrLmludC5jZW50ZXIsCiAgICByZnAuaW50Lm1lYW4sCiAgICByZnAuaW50Lm1lZGlhbiwKICAgIHJmcC5pbnQuc3VtLAogICAgZGFwaS5pbnQubWVhbiwKICAgIGRhcGkuaW50Lm1lZGlhbiwKICAgIGRhcGkuaW50LnN1bSwKICAgIGV4cGVyaW1lbnQsCiAgICBmaWVsZAogICkgJT4lIAogIGxlZnRfam9pbigKICAgIC4sCiAgICBwdXAxX3B1bmN0YSAlPiUgICAgICAgICNkZiB3aXRoIHRoZSBwdXAxIHB1bmN0YSBzZWdtZW50ZWQgCiAgICAgIHNlbGVjdCgKICAgICAgICByZnAuaW50LmNlbnRlciwKICAgICAgICByZnAuaW50Lm1lYW4sCiAgICAgICAgcmZwLmludC5tZWRpYW4sCiAgICAgICAgcmZwLmludC5zdW0sCiAgICAgICAgZGFwaS5pbnQubWVhbiwKICAgICAgICBkYXBpLmludC5zdW0sCiAgICAgICAgZGFwaS5pbnQubWVkaWFuLAogICAgICAgIGFsbC5tYXNrLmludC5tYXgsCiAgICAgICAgYWxsLm1hc2suaW50LmNlbnRlciwKICAgICAgICBhcmVhLAogICAgICAgIHRpbWVwb2ludCwKICAgICAgICBleHBlcmltZW50LAogICAgICAgIGZpZWxkLAogICAgICAgIG5vLm9mLnZveGVscwogICAgICApICU+JSByZW5hbWUoImFyZWEucHVuY3RhIiA9ICJhcmVhIiwKICAgICAgICAgICAgICAgICAgICJyZnAuY2VudGVyLnB1bmN0YSIgPSAicmZwLmludC5jZW50ZXIiLAogICAgICAgICAgICAgICAgICAgInJmcC5tZWFuLnB1bmN0YSIgPSAicmZwLmludC5tZWFuIiwKICAgICAgICAgICAgICAgICAgICJyZnAuc3VtLnB1bmN0YSIgPSAicmZwLmludC5zdW0iLAogICAgICAgICAgICAgICAgICAgInJmcC5tZWRpYW4ucHVuY3RhIiA9ICJyZnAuaW50Lm1lZGlhbiIsCiAgICAgICAgICAgICAgICAgICAiZGFwaS5tZWFuLnB1bmN0YSIgPSAiZGFwaS5pbnQubWVhbiIsCiAgICAgICAgICAgICAgICAgICAiZGFwaS5zdW0ucHVuY3RhIiA9ICJkYXBpLmludC5zdW0iLAogICAgICAgICAgICAgICAgICAgImRhcGkubWVkaWFuLnB1bmN0YSIgPSAiZGFwaS5pbnQubWVkaWFuIiwKICAgICAgICAgICAgICAgICAgICJuby5vZi52b3hlbHMucHVuY3RhIiA9ICJuby5vZi52b3hlbHMiKSwKICAgICBieSA9IGMoImFsbC5tYXNrLmludC5tYXgiICwgCiAgICAgICAgICAgICJleHBlcmltZW50IiAsIAogICAgICAgICAgICAiZmllbGQiICwgCiAgICAgICAgICAgICJ0aW1lcG9pbnQiICwgCiAgICAgICAgICAgICJhbGwubWFzay5pbnQuY2VudGVyIikKICApCgoKcHVwMS5kYXBpLmNlbGwucHVuY3RhIAojdGhpcyBoYXMgNjUxNCBjZWxscy4gc29tZSBjZWxscyBoYXZlIG11bHRpcGxlIHB1bmN0YS4gbWF5YmUganVzdCBkcm9wIHRoZSBjZWxscy4gCmBgYAoKCmBgYHtyfQpyZWFkX2Nzdigifi9wbG90cy9wdXAxLXJmcC1nZnAtZGVjYXkvNi0yOC0yMi1tb2RjLWdmcC9kYXRhLzYtMjgtMjJfbU9EQ19wdXAxX2F0dHJpYnV0ZXMuY3N2IikgJT4lIAogIGxlZnRfam9pbiguLHB1cDEuZGFwaS5jZWxsLnB1bmN0YSAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGFyZWEscG9zLngscG9zLnksIHRpbWVwb2ludCwgZXhwZXJpbWVudCwgZmllbGQsIGFyZWEucHVuY3RhLCBuby5vZi52b3hlbHMucHVuY3RhKSwgCiAgICAgICAgICAgIGJ5ID0gYygiYXJlYSIsICJwb3MueCIsInBvcy55IiwidGltZXBvaW50IiwiZXhwZXJpbWVudCIsImZpZWxkIikpICU+JQogIHdyaXRlX2NzdiguLHBhdGggPSAifi9wbG90cy9wdXAxLXJmcC1nZnAtZGVjYXkvNi0yOC0yMi1tb2RjLWdmcC9kYXRhLzYtMjgtMjJfbU9EQ19wdXAxX2F0dHJpYnV0ZXMuY3N2IikKYGBgCg==